From e6f89d520fc4608dfee9a7c9357e974681d02372 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Tue, 19 Nov 2024 10:23:59 +0100 Subject: [PATCH 01/40] chore: update lock of deps (#371) Signed-off-by: Michele Dolfi --- poetry.lock | 1881 ++++++++++++++++++++++++++------------------------- 1 file changed, 957 insertions(+), 924 deletions(-) diff --git a/poetry.lock b/poetry.lock index 6d70eb59..c7e040d8 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,112 +13,98 @@ files = [ [[package]] name = "aiohttp" -version = "3.10.10" +version = "3.11.2" description = "Async http client/server framework (asyncio)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:be7443669ae9c016b71f402e43208e13ddf00912f47f623ee5994e12fc7d4b3f"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:7b06b7843929e41a94ea09eb1ce3927865387e3e23ebe108e0d0d09b08d25be9"}, - {file = "aiohttp-3.10.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:333cf6cf8e65f6a1e06e9eb3e643a0c515bb850d470902274239fea02033e9a8"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:274cfa632350225ce3fdeb318c23b4a10ec25c0e2c880eff951a3842cf358ac1"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9e5e4a85bdb56d224f412d9c98ae4cbd032cc4f3161818f692cd81766eee65a"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b606353da03edcc71130b52388d25f9a30a126e04caef1fd637e31683033abd"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ab5a5a0c7a7991d90446a198689c0535be89bbd6b410a1f9a66688f0880ec026"}, - {file = "aiohttp-3.10.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:578a4b875af3e0daaf1ac6fa983d93e0bbfec3ead753b6d6f33d467100cdc67b"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:8105fd8a890df77b76dd3054cddf01a879fc13e8af576805d667e0fa0224c35d"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3bcd391d083f636c06a68715e69467963d1f9600f85ef556ea82e9ef25f043f7"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fbc6264158392bad9df19537e872d476f7c57adf718944cc1e4495cbabf38e2a"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:e48d5021a84d341bcaf95c8460b152cfbad770d28e5fe14a768988c461b821bc"}, - {file = "aiohttp-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:2609e9ab08474702cc67b7702dbb8a80e392c54613ebe80db7e8dbdb79837c68"}, - {file = "aiohttp-3.10.10-cp310-cp310-win32.whl", hash = "sha256:84afcdea18eda514c25bc68b9af2a2b1adea7c08899175a51fe7c4fb6d551257"}, - {file = "aiohttp-3.10.10-cp310-cp310-win_amd64.whl", hash = "sha256:9c72109213eb9d3874f7ac8c0c5fa90e072d678e117d9061c06e30c85b4cf0e6"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:c30a0eafc89d28e7f959281b58198a9fa5e99405f716c0289b7892ca345fe45f"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:258c5dd01afc10015866114e210fb7365f0d02d9d059c3c3415382ab633fcbcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:15ecd889a709b0080f02721255b3f80bb261c2293d3c748151274dfea93ac871"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f3935f82f6f4a3820270842e90456ebad3af15810cf65932bd24da4463bc0a4c"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:413251f6fcf552a33c981c4709a6bba37b12710982fec8e558ae944bfb2abd38"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d1720b4f14c78a3089562b8875b53e36b51c97c51adc53325a69b79b4b48ebcb"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:679abe5d3858b33c2cf74faec299fda60ea9de62916e8b67e625d65bf069a3b7"}, - {file = "aiohttp-3.10.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:79019094f87c9fb44f8d769e41dbb664d6e8fcfd62f665ccce36762deaa0e911"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:fe2fb38c2ed905a2582948e2de560675e9dfbee94c6d5ccdb1301c6d0a5bf092"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a3f00003de6eba42d6e94fabb4125600d6e484846dbf90ea8e48a800430cc142"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:1bbb122c557a16fafc10354b9d99ebf2f2808a660d78202f10ba9d50786384b9"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30ca7c3b94708a9d7ae76ff281b2f47d8eaf2579cd05971b5dc681db8caac6e1"}, - {file = "aiohttp-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:df9270660711670e68803107d55c2b5949c2e0f2e4896da176e1ecfc068b974a"}, - {file = "aiohttp-3.10.10-cp311-cp311-win32.whl", hash = "sha256:aafc8ee9b742ce75044ae9a4d3e60e3d918d15a4c2e08a6c3c3e38fa59b92d94"}, - {file = "aiohttp-3.10.10-cp311-cp311-win_amd64.whl", hash = "sha256:362f641f9071e5f3ee6f8e7d37d5ed0d95aae656adf4ef578313ee585b585959"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:9294bbb581f92770e6ed5c19559e1e99255e4ca604a22c5c6397b2f9dd3ee42c"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:a8fa23fe62c436ccf23ff930149c047f060c7126eae3ccea005f0483f27b2e28"}, - {file = "aiohttp-3.10.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5c6a5b8c7926ba5d8545c7dd22961a107526562da31a7a32fa2456baf040939f"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:007ec22fbc573e5eb2fb7dec4198ef8f6bf2fe4ce20020798b2eb5d0abda6138"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9627cc1a10c8c409b5822a92d57a77f383b554463d1884008e051c32ab1b3742"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:50edbcad60d8f0e3eccc68da67f37268b5144ecc34d59f27a02f9611c1d4eec7"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a45d85cf20b5e0d0aa5a8dca27cce8eddef3292bc29d72dcad1641f4ed50aa16"}, - {file = "aiohttp-3.10.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b00807e2605f16e1e198f33a53ce3c4523114059b0c09c337209ae55e3823a8"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f2d4324a98062be0525d16f768a03e0bbb3b9fe301ceee99611dc9a7953124e6"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:438cd072f75bb6612f2aca29f8bd7cdf6e35e8f160bc312e49fbecab77c99e3a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:baa42524a82f75303f714108fea528ccacf0386af429b69fff141ffef1c534f9"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7d8d14fe962153fc681f6366bdec33d4356f98a3e3567782aac1b6e0e40109a"}, - {file = "aiohttp-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c1277cd707c465cd09572a774559a3cc7c7a28802eb3a2a9472588f062097205"}, - {file = "aiohttp-3.10.10-cp312-cp312-win32.whl", hash = "sha256:59bb3c54aa420521dc4ce3cc2c3fe2ad82adf7b09403fa1f48ae45c0cbde6628"}, - {file = "aiohttp-3.10.10-cp312-cp312-win_amd64.whl", hash = "sha256:0e1b370d8007c4ae31ee6db7f9a2fe801a42b146cec80a86766e7ad5c4a259cf"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ad7593bb24b2ab09e65e8a1d385606f0f47c65b5a2ae6c551db67d6653e78c28"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1eb89d3d29adaf533588f209768a9c02e44e4baf832b08118749c5fad191781d"}, - {file = "aiohttp-3.10.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3fe407bf93533a6fa82dece0e74dbcaaf5d684e5a51862887f9eaebe6372cd79"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:50aed5155f819873d23520919e16703fc8925e509abbb1a1491b0087d1cd969e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4f05e9727ce409358baa615dbeb9b969db94324a79b5a5cea45d39bdb01d82e6"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3dffb610a30d643983aeb185ce134f97f290f8935f0abccdd32c77bed9388b42"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa6658732517ddabe22c9036479eabce6036655ba87a0224c612e1ae6af2087e"}, - {file = "aiohttp-3.10.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:741a46d58677d8c733175d7e5aa618d277cd9d880301a380fd296975a9cdd7bc"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e00e3505cd80440f6c98c6d69269dcc2a119f86ad0a9fd70bccc59504bebd68a"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:ffe595f10566f8276b76dc3a11ae4bb7eba1aac8ddd75811736a15b0d5311414"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:bdfcf6443637c148c4e1a20c48c566aa694fa5e288d34b20fcdc58507882fed3"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d183cf9c797a5291e8301790ed6d053480ed94070637bfaad914dd38b0981f67"}, - {file = "aiohttp-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:77abf6665ae54000b98b3c742bc6ea1d1fb31c394bcabf8b5d2c1ac3ebfe7f3b"}, - {file = "aiohttp-3.10.10-cp313-cp313-win32.whl", hash = "sha256:4470c73c12cd9109db8277287d11f9dd98f77fc54155fc71a7738a83ffcc8ea8"}, - {file = "aiohttp-3.10.10-cp313-cp313-win_amd64.whl", hash = "sha256:486f7aabfa292719a2753c016cc3a8f8172965cabb3ea2e7f7436c7f5a22a151"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:1b66ccafef7336a1e1f0e389901f60c1d920102315a56df85e49552308fc0486"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:acd48d5b80ee80f9432a165c0ac8cbf9253eaddb6113269a5e18699b33958dbb"}, - {file = "aiohttp-3.10.10-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:3455522392fb15ff549d92fbf4b73b559d5e43dc522588f7eb3e54c3f38beee7"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45c3b868724137f713a38376fef8120c166d1eadd50da1855c112fe97954aed8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:da1dee8948d2137bb51fbb8a53cce6b1bcc86003c6b42565f008438b806cccd8"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5ce2ce7c997e1971b7184ee37deb6ea9922ef5163c6ee5aa3c274b05f9e12fa"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:28529e08fde6f12eba8677f5a8608500ed33c086f974de68cc65ab218713a59d"}, - {file = "aiohttp-3.10.10-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f7db54c7914cc99d901d93a34704833568d86c20925b2762f9fa779f9cd2e70f"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:03a42ac7895406220124c88911ebee31ba8b2d24c98507f4a8bf826b2937c7f2"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:7e338c0523d024fad378b376a79faff37fafb3c001872a618cde1d322400a572"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:038f514fe39e235e9fef6717fbf944057bfa24f9b3db9ee551a7ecf584b5b480"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:64f6c17757251e2b8d885d728b6433d9d970573586a78b78ba8929b0f41d045a"}, - {file = "aiohttp-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:93429602396f3383a797a2a70e5f1de5df8e35535d7806c9f91df06f297e109b"}, - {file = "aiohttp-3.10.10-cp38-cp38-win32.whl", hash = "sha256:c823bc3971c44ab93e611ab1a46b1eafeae474c0c844aff4b7474287b75fe49c"}, - {file = "aiohttp-3.10.10-cp38-cp38-win_amd64.whl", hash = "sha256:54ca74df1be3c7ca1cf7f4c971c79c2daf48d9aa65dea1a662ae18926f5bc8ce"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:01948b1d570f83ee7bbf5a60ea2375a89dfb09fd419170e7f5af029510033d24"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9fc1500fd2a952c5c8e3b29aaf7e3cc6e27e9cfc0a8819b3bce48cc1b849e4cc"}, - {file = "aiohttp-3.10.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f614ab0c76397661b90b6851a030004dac502e48260ea10f2441abd2207fbcc7"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:00819de9e45d42584bed046314c40ea7e9aea95411b38971082cad449392b08c"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:05646ebe6b94cc93407b3bf34b9eb26c20722384d068eb7339de802154d61bc5"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:998f3bd3cfc95e9424a6acd7840cbdd39e45bc09ef87533c006f94ac47296090"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d9010c31cd6fa59438da4e58a7f19e4753f7f264300cd152e7f90d4602449762"}, - {file = "aiohttp-3.10.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7ea7ffc6d6d6f8a11e6f40091a1040995cdff02cfc9ba4c2f30a516cb2633554"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:ef9c33cc5cbca35808f6c74be11eb7f5f6b14d2311be84a15b594bd3e58b5527"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ce0cdc074d540265bfeb31336e678b4e37316849d13b308607efa527e981f5c2"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:597a079284b7ee65ee102bc3a6ea226a37d2b96d0418cc9047490f231dc09fe8"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:7789050d9e5d0c309c706953e5e8876e38662d57d45f936902e176d19f1c58ab"}, - {file = "aiohttp-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:e7f8b04d83483577fd9200461b057c9f14ced334dcb053090cea1da9c8321a91"}, - {file = "aiohttp-3.10.10-cp39-cp39-win32.whl", hash = "sha256:c02a30b904282777d872266b87b20ed8cc0d1501855e27f831320f471d54d983"}, - {file = "aiohttp-3.10.10-cp39-cp39-win_amd64.whl", hash = "sha256:edfe3341033a6b53a5c522c802deb2079eee5cbfbb0af032a55064bd65c73a23"}, - {file = "aiohttp-3.10.10.tar.gz", hash = "sha256:0631dd7c9f0822cc61c88586ca76d5b5ada26538097d0f1df510b082bad3411a"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:783741f534c14957fbe657d62a34b947ec06db23d45a2fd4a8aeb73d9c84d7e6"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:435f7a08d8aa42371a94e7c141205a9cb092ba551084b5e0c57492e6673601a3"}, + {file = "aiohttp-3.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c681f34e2814bc6e1eef49752b338061b94a42c92734d0be9513447d3f83718c"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a664478ae1ea011b5a710fb100b115ca8b2146864fa0ce4143ff944df714b8"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1d06c8fd8b453c3e553c956bd3b8395100401060430572174bb7876dd95ad49"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b1f4844909321ef2c1cee50ddeccbd6018cd8c8d1ddddda3f553e94a5859497"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdc6f8dce09281ae534eaf08a54f0d38612398375f28dad733a8885f3bf9b978"}, + {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2d942421cf3a1d1eceae8fa192f1fbfb74eb9d3e207d35ad2696bd2ce2c987c"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:08ebe7a1d6c1e5ca766d68407280d69658f5f98821c2ba6c41c63cabfed159af"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2793d3297f3e49015140e6d3ea26142c967e07998e2fb00b6ee8d041138fbc4e"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4a23475d8d5c56e447b7752a1e2ac267c1f723f765e406c81feddcd16cdc97bc"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:556564d89e2f4a6e8fe000894c03e4e84cf0b6cfa5674e425db122633ee244d1"}, + {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57993f406ce3f114b2a6756d7809be3ffd0cc40f33e8f8b9a4aa1b027fd4e3eb"}, + {file = "aiohttp-3.11.2-cp310-cp310-win32.whl", hash = "sha256:177b000efaf8d2f7012c649e8aee5b0bf488677b1162be5e7511aa4f9d567607"}, + {file = "aiohttp-3.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:ff5d22eece44528023254b595c670dfcf9733ac6af74c4b6cb4f6a784dc3870c"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50e0aee4adc9abcd2109c618a8d1b2c93b85ac277b24a003ab147d91e068b06d"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aa4e68f1e4f303971ec42976fb170204fb5092de199034b57199a1747e78a2d"}, + {file = "aiohttp-3.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d84930b4145991214602372edd7305fc76b700220db79ac0dd57d3afd0f0a1ca"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ec8afd362356b8798c8caa806e91deb3f0602d8ffae8e91d2d3ced2a90c35e"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb0544a0e8294a5a5e20d3cacdaaa9a911d7c0a9150f5264aef36e7d8fdfa07e"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7b0a1618060e3f5aa73d3526ca2108a16a1b6bf86612cd0bb2ddcbef9879d06"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d878a0186023ac391861958035174d0486f3259cabf8fd94e591985468da3ea"}, + {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e33a7eddcd07545ccf5c3ab230f60314a17dc33e285475e8405e26e21f02660"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4d7fad8c456d180a6d2f44c41cfab4b80e2e81451815825097db48b8293f59d5"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d954ba0eae7f33884d27dc00629ca4389d249eb8d26ca07c30911257cae8c96"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:afa55e863224e664a782effa62245df73fdfc55aee539bed6efacf35f6d4e4b7"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:10a5f91c319d9d4afba812f72984816b5fcd20742232ff7ecc1610ffbf3fc64d"}, + {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6e8e19a80ba194db5c06915a9df23c0c06e0e9ca9a4db9386a6056cca555a027"}, + {file = "aiohttp-3.11.2-cp311-cp311-win32.whl", hash = "sha256:9c8d1db4f65bbc9d75b7b271d68fb996f1c8c81a525263862477d93611856c2d"}, + {file = "aiohttp-3.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:2adb967454e10e69478ba4a8d8afbba48a7c7a8619216b7c807f8481cc66ddfb"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f833a80d9de9307d736b6af58c235b17ef7f90ebea7b9c49cd274dec7a66a2f1"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:382f853516664d2ebfc75dc01da4a10fdef5edcb335fe7b45cf471ce758ecb18"}, + {file = "aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3a2bcf6c81639a165da93469e1e0aff67c956721f3fa9c0560f07dd1e505116"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de3b4d5fb5d69749104b880a157f38baeea7765c93d9cd3837cedd5b84729e10"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a90a0dc4b054b5af299a900bf950fe8f9e3e54322bc405005f30aa5cacc5c98"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32334f35824811dd20a12cc90825d000e6b50faaeaa71408d42269151a66140d"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cba0b8d25aa2d450762f3dd6df85498f5e7c3ad0ddeb516ef2b03510f0eea32"}, + {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bbb2dbc2701ab7e9307ca3a8fa4999c5b28246968e0a0202a5afabf48a42e22"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97fba98fc5d9ccd3d33909e898d00f2494d6a9eec7cbda3d030632e2c8bb4d00"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0ebdf5087e2ce903d8220cc45dcece90c2199ae4395fd83ca616fcc81010db2c"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:122768e3ae9ce74f981b46edefea9c6e5a40aea38aba3ac50168e6370459bf20"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5587da333b7d280a312715b843d43e734652aa382cba824a84a67c81f75b338b"}, + {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:85de9904bc360fd29a98885d2bfcbd4e02ab33c53353cb70607f2bea2cb92468"}, + {file = "aiohttp-3.11.2-cp312-cp312-win32.whl", hash = "sha256:b470de64d17156c37e91effc109d3b032b39867000e2c126732fe01d034441f9"}, + {file = "aiohttp-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:3f617a48b70f4843d54f52440ea1e58da6bdab07b391a3a6aed8d3b311a4cc04"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d90b5a3b0f32a5fecf5dd83d828713986c019585f5cddf40d288ff77f366615"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d23854e5867650d40cba54d49956aad8081452aa80b2cf0d8c310633f4f48510"}, + {file = "aiohttp-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:486273d3b5af75a80c31c311988931bdd2a4b96a74d5c7f422bad948f99988ef"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9075313f8e41b481e4cb10af405054564b0247dc335db5398ed05f8ec38787e2"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44b69c69c194ffacbc50165911cf023a4b1b06422d1e1199d3aea82eac17004e"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b339d91ac9060bd6ecdc595a82dc151045e5d74f566e0864ef3f2ba0887fec42"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e8f5178958a9954043bc8cd10a5ae97352c3f2fc99aa01f2aebb0026010910"}, + {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3129151378f858cdc4a0a4df355c9a0d060ab49e2eea7e62e9f085bac100551b"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:14eb6c628432720e41b4fab1ada879d56cfe7034159849e083eb536b4c2afa99"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e57a10aacedcf24666f4c90d03e599f71d172d1c5e00dcf48205c445806745b0"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:66e58a2e8c7609a3545c4b38fb8b01a6b8346c4862e529534f7674c5265a97b8"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9b6d15adc9768ff167614ca853f7eeb6ee5f1d55d5660e3af85ce6744fed2b82"}, + {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2914061f5ca573f990ec14191e6998752fa8fe50d518e3405410353c3f44aa5d"}, + {file = "aiohttp-3.11.2-cp313-cp313-win32.whl", hash = "sha256:1c2496182e577042e0e07a328d91c949da9e77a2047c7291071e734cd7a6e780"}, + {file = "aiohttp-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:cccb2937bece1310c5c0163d0406aba170a2e5fb1f0444d7b0e7fdc9bd6bb713"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:994cb893936dd2e1803655ae8667a45066bfd53360b148e22b4e3325cc5ea7a3"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3666c750b73ce463a413692e3a57c60f7089e2d9116a2aa5a0f0eaf2ae325148"}, + {file = "aiohttp-3.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6ad9a7d2a3a0f235184426425f80bd3b26c66b24fd5fddecde66be30c01ebe6e"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c979fc92aba66730b66099cd5becb42d869a26c0011119bc1c2478408a8bf7a"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:766d0ebf8703d28f854f945982aa09224d5a27a29594c70d921c43c3930fe7ac"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79efd1ee3827b2f16797e14b1e45021206c3271249b4d0025014466d416d7413"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6e069b882c1fdcbe5577dc4be372eda705180197140577a4cddb648c29d22e"}, + {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e9a766c346b2ed7e88937919d84ed64b4ef489dad1d8939f806ee52901dc142"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2b02a68b9445c70d7f5c8b578c5f5e5866b1d67ca23eb9e8bc8658ae9e3e2c74"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:374baefcb1b6275f350da605951f5f02487a9bc84a574a7d5b696439fabd49a3"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d2f991c18132f3e505c108147925372ffe4549173b7c258cf227df1c5977a635"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:34f37c59b12bc3afc52bab6fcd9cd3be82ff01c4598a84cbea934ccb3a9c54a0"}, + {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:33af11eca7bb0f5c6ffaf5e7d9d2336c2448f9c6279b93abdd6f3c35f9ee321f"}, + {file = "aiohttp-3.11.2-cp39-cp39-win32.whl", hash = "sha256:83a70e22e0f6222effe7f29fdeba6c6023f9595e59a0479edacfbd7de4b77bb7"}, + {file = "aiohttp-3.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:c28c1677ea33ccb8b14330560094cc44d3ff4fad617a544fd18beb90403fe0f1"}, + {file = "aiohttp-3.11.2.tar.gz", hash = "sha256:68d1f46f9387db3785508f5225d3acbc5825ca13d9c29f2b5cce203d5863eb79"}, ] [package.dependencies] aiohappyeyeballs = ">=2.3.0" aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} +async-timeout = {version = ">=4.0,<6.0", markers = "python_version < \"3.11\""} attrs = ">=17.3.0" frozenlist = ">=1.1.1" multidict = ">=4.5,<7.0" -yarl = ">=1.12.0,<2.0" +propcache = ">=0.2.0" +yarl = ">=1.17.0,<2.0" [package.extras] speedups = ["Brotli", "aiodns (>=3.2.0)", "brotlicffi"] @@ -196,8 +182,8 @@ files = [ lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, ] [[package]] @@ -220,13 +206,13 @@ test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] [[package]] name = "async-timeout" -version = "4.0.3" +version = "5.0.1" description = "Timeout context manager for asyncio programs" optional = false -python-versions = ">=3.7" +python-versions = ">=3.8" files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, + {file = "async_timeout-5.0.1-py3-none-any.whl", hash = "sha256:39e3809566ff85354557ec2398b55e096c8364bacac9405a7a1fa429e77fe76c"}, + {file = "async_timeout-5.0.1.tar.gz", hash = "sha256:d9321a7a3d5a6a5e187e824d2fa0793ce379a202935782d555d6e9d2735677d3"}, ] [[package]] @@ -744,37 +730,37 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.7" +version = "1.8.8" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.7-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:95fe04a573b8b22896c404365e03f4eda0ce0ba135b7667a1e57bd079793b96b"}, - {file = "debugpy-1.8.7-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:628a11f4b295ffb4141d8242a9bb52b77ad4a63a2ad19217a93be0f77f2c28c9"}, - {file = "debugpy-1.8.7-cp310-cp310-win32.whl", hash = "sha256:85ce9c1d0eebf622f86cc68618ad64bf66c4fc3197d88f74bb695a416837dd55"}, - {file = "debugpy-1.8.7-cp310-cp310-win_amd64.whl", hash = "sha256:29e1571c276d643757ea126d014abda081eb5ea4c851628b33de0c2b6245b037"}, - {file = "debugpy-1.8.7-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:caf528ff9e7308b74a1749c183d6808ffbedbb9fb6af78b033c28974d9b8831f"}, - {file = "debugpy-1.8.7-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cba1d078cf2e1e0b8402e6bda528bf8fda7ccd158c3dba6c012b7897747c41a0"}, - {file = "debugpy-1.8.7-cp311-cp311-win32.whl", hash = "sha256:171899588bcd412151e593bd40d9907133a7622cd6ecdbdb75f89d1551df13c2"}, - {file = "debugpy-1.8.7-cp311-cp311-win_amd64.whl", hash = "sha256:6e1c4ffb0c79f66e89dfd97944f335880f0d50ad29525dc792785384923e2211"}, - {file = "debugpy-1.8.7-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:4d27d842311353ede0ad572600c62e4bcd74f458ee01ab0dd3a1a4457e7e3706"}, - {file = "debugpy-1.8.7-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:703c1fd62ae0356e194f3e7b7a92acd931f71fe81c4b3be2c17a7b8a4b546ec2"}, - {file = "debugpy-1.8.7-cp312-cp312-win32.whl", hash = "sha256:2f729228430ef191c1e4df72a75ac94e9bf77413ce5f3f900018712c9da0aaca"}, - {file = "debugpy-1.8.7-cp312-cp312-win_amd64.whl", hash = "sha256:45c30aaefb3e1975e8a0258f5bbd26cd40cde9bfe71e9e5a7ac82e79bad64e39"}, - {file = "debugpy-1.8.7-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:d050a1ec7e925f514f0f6594a1e522580317da31fbda1af71d1530d6ea1f2b40"}, - {file = "debugpy-1.8.7-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2f4349a28e3228a42958f8ddaa6333d6f8282d5edaea456070e48609c5983b7"}, - {file = "debugpy-1.8.7-cp313-cp313-win32.whl", hash = "sha256:11ad72eb9ddb436afb8337891a986302e14944f0f755fd94e90d0d71e9100bba"}, - {file = "debugpy-1.8.7-cp313-cp313-win_amd64.whl", hash = "sha256:2efb84d6789352d7950b03d7f866e6d180284bc02c7e12cb37b489b7083d81aa"}, - {file = "debugpy-1.8.7-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:4b908291a1d051ef3331484de8e959ef3e66f12b5e610c203b5b75d2725613a7"}, - {file = "debugpy-1.8.7-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da8df5b89a41f1fd31503b179d0a84a5fdb752dddd5b5388dbd1ae23cda31ce9"}, - {file = "debugpy-1.8.7-cp38-cp38-win32.whl", hash = "sha256:b12515e04720e9e5c2216cc7086d0edadf25d7ab7e3564ec8b4521cf111b4f8c"}, - {file = "debugpy-1.8.7-cp38-cp38-win_amd64.whl", hash = "sha256:93176e7672551cb5281577cdb62c63aadc87ec036f0c6a486f0ded337c504596"}, - {file = "debugpy-1.8.7-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:90d93e4f2db442f8222dec5ec55ccfc8005821028982f1968ebf551d32b28907"}, - {file = "debugpy-1.8.7-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6db2a370e2700557a976eaadb16243ec9c91bd46f1b3bb15376d7aaa7632c81"}, - {file = "debugpy-1.8.7-cp39-cp39-win32.whl", hash = "sha256:a6cf2510740e0c0b4a40330640e4b454f928c7b99b0c9dbf48b11efba08a8cda"}, - {file = "debugpy-1.8.7-cp39-cp39-win_amd64.whl", hash = "sha256:6a9d9d6d31846d8e34f52987ee0f1a904c7baa4912bf4843ab39dadf9b8f3e0d"}, - {file = "debugpy-1.8.7-py2.py3-none-any.whl", hash = "sha256:57b00de1c8d2c84a61b90880f7e5b6deaf4c312ecbde3a0e8912f2a56c4ac9ae"}, - {file = "debugpy-1.8.7.zip", hash = "sha256:18b8f731ed3e2e1df8e9cdaa23fb1fc9c24e570cd0081625308ec51c82efe42e"}, + {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, + {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, + {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, + {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, + {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, + {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, + {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, + {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, + {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, + {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, + {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, + {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, + {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, + {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, + {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, + {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, + {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, + {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, + {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, + {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, + {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, + {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, + {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, + {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, + {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, + {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, ] [[package]] @@ -839,8 +825,8 @@ files = [ docling-core = ">=2.0,<3.0" docutils = "!=0.21" numpy = [ - {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, ] pandas = {version = ">=2.1.4,<3.0.0", markers = "python_version >= \"3.9\""} python-dotenv = ">=1.0.0,<2.0.0" @@ -893,13 +879,13 @@ files = [ [[package]] name = "docling-core" -version = "2.3.0" +version = "2.4.0" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.3.0-py3-none-any.whl", hash = "sha256:caf457cc65ae3857fcbfaabc995ce8e71cb7ec3966753c8c6fc74062d6a80bf8"}, - {file = "docling_core-2.3.0.tar.gz", hash = "sha256:2534e1fa74fcd760be6a9943c5fd1ff01826eb32b5488bcdf53c0a0ad4f362e1"}, + {file = "docling_core-2.4.0-py3-none-any.whl", hash = "sha256:dbc6b48d9d8b20800a9eb796d69a33660202c761bf53092697b7b07d28842cc3"}, + {file = "docling_core-2.4.0.tar.gz", hash = "sha256:93f817b0105d564bbd334f8314b359b8a3fb234ec47b5013a020c9cb6ebd2e87"}, ] [package.dependencies] @@ -912,23 +898,22 @@ tabulate = ">=0.9.0,<0.10.0" [[package]] name = "docling-ibm-models" -version = "2.0.3" +version = "2.0.4" description = "This package contains the AI models used by the Docling PDF conversion package" optional = false python-versions = "<4.0,>=3.10" files = [ - {file = "docling_ibm_models-2.0.3-py3-none-any.whl", hash = "sha256:49e6d5eb8ca87bbee1a2aa95cddd2570ca303e87b7135d089eb5c52a61c0841c"}, - {file = "docling_ibm_models-2.0.3.tar.gz", hash = "sha256:4ac155490a8646daca8aa7a45f0ee136ef96c4a0fbc24812694ec8fc45e5cadb"}, + {file = "docling_ibm_models-2.0.4-py3-none-any.whl", hash = "sha256:425ebe86fb67c0ab22128e8d08cd8d4a94a4676d4a88282c76efdcf2b0e08534"}, + {file = "docling_ibm_models-2.0.4.tar.gz", hash = "sha256:f21b68755ee253225c95b4710ec68eb575d7cdef4abe07ee9f13936e1c8f208d"}, ] [package.dependencies] huggingface_hub = ">=0.23,<1" jsonlines = ">=3.1.0,<4.0.0" -lxml = ">=4.9.1,<5.0.0" mean_average_precision = ">=2021.4.26.0,<2022.0.0.0" numpy = [ - {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, ] opencv-python-headless = ">=4.6.0.66,<5.0.0.0" Pillow = ">=10.0.0,<11.0.0" @@ -938,41 +923,41 @@ tqdm = ">=4.64.0,<5.0.0" [[package]] name = "docling-parse" -version = "2.0.2" +version = "2.0.4" description = "Simple package to extract text with coordinates from programmatic PDFs" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_parse-2.0.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:e5233210555b40608b4229b348e1fc95b46bb8ab0aed459cc3d8ff5735ffee09"}, - {file = "docling_parse-2.0.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:92e496418b28ffee0275c3e6dfc8129297ae9fd4b239ca028e0114ccb147c3dd"}, - {file = "docling_parse-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:c55fe1d5e43176580038de7d2c03899ec8d3a729e93eaa214a9e60d7889be1a1"}, - {file = "docling_parse-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:20d6377cc7374c7ac538a928f28ab5033ab1b674cce9d0358fdf1be5a49f819d"}, - {file = "docling_parse-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7abc64de66160012f4329a78823cee54aaa47b4835b2b9f1ed3644b85ac9501f"}, - {file = "docling_parse-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75c10ef2d9e4eb4cf7309171707f1c8daf22a14f24c4843f1b549f709f7452b2"}, - {file = "docling_parse-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:171baf4897143c91037960b74cb9e97caa5772045e236064425f347ad9156acf"}, - {file = "docling_parse-2.0.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:9e29fa9fcae08f700a7f218dbbab131e68628ba0dd38970131d9d4059e71d6bb"}, - {file = "docling_parse-2.0.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:8e4f7efd533119ecb51f8a431b79028b57d5ebf8f24517234d9b9de9ed090386"}, - {file = "docling_parse-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5632328c84344fbce86a59f4c83c4efc71f8d87cbb885e01c4cbe4fd56db97f7"}, - {file = "docling_parse-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:e2bf535f8334184f7fac43724bfff58390f825d7da01e6faa02e09572cbc7bc8"}, - {file = "docling_parse-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f1dac5583f8ed53bd4b878c9bacdd5db493310c2560491e869e1b475d6fb8faf"}, - {file = "docling_parse-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:34571c5493593d440b2b18869efc7f753e7ef698f890cc470c3dc3e1cb0986be"}, - {file = "docling_parse-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:434077fb9fb4738f9f604c015002882af846786ea2fa0535cb3e79f21e25a26d"}, - {file = "docling_parse-2.0.2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:6f95a151870411925f5f714fe1c3d7f7f595b75d537cfbb30868db389254b7fd"}, - {file = "docling_parse-2.0.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:b82b3b11bee797cf125d4835b1f27588d76989eef608aaf71c022a78550529f3"}, - {file = "docling_parse-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:0ec54785bc206ead2fbdcc4b858560e9607ee87df2565e662479f0c204467571"}, - {file = "docling_parse-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:608a42ea54174972090bd454225787e3185f90c837850265f05faa0d4fd6cf7f"}, - {file = "docling_parse-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e41fab53ee92ab4a92db502c849feaca403f3aa9099cf8284b2d305942abb50e"}, - {file = "docling_parse-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e011ba13df36bd8e1b5101fbccb8ae80b43b1e61e7008db36259ba00222bac3d"}, - {file = "docling_parse-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:7c6c93771fe7c4edf40558ff0f6bf5063d8d5e02a56f6db5d979beb60b33802c"}, - {file = "docling_parse-2.0.2-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:15a68fcc412a8fff90e63d9def24cad996b7fb291e8f084e48f838324f935c12"}, - {file = "docling_parse-2.0.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:6b7b9e18781672bdddaf5632307b3a538484c96221604ef463cd4e333716c712"}, - {file = "docling_parse-2.0.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:a087e4917f620cbfcb56f9df82a19f4d0ac9e4c9f786de772ef98c399da791f4"}, - {file = "docling_parse-2.0.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:b630b6f28031cafd8f1ed044b7045d4ea67a726e6f289d0fbe54fbf388cfa3c0"}, - {file = "docling_parse-2.0.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f7eea81abf6ce91e7b450744b004095d1c52fca6cd39f00da05c8023e436aad"}, - {file = "docling_parse-2.0.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07497616fc9b7ca66231d1b1c026199e3645c26c64f100e25f4a1f26543383b6"}, - {file = "docling_parse-2.0.2-cp313-cp313-win_amd64.whl", hash = "sha256:3174ee8fec2ed5ff8e97598a6881515da185e945e9a5d5ab776246ec6ee98baf"}, - {file = "docling_parse-2.0.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:61e9e0a392de5cde72a9f6cc91e01b5b9853efb327a31b129f22324ee8f0aba2"}, - {file = "docling_parse-2.0.2.tar.gz", hash = "sha256:18823b491b060972df7c2623184896005435b1ec8a9fb5e386427207e2dda0bd"}, + {file = "docling_parse-2.0.4-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:1ba71aa48538fd118b7f5e872573d384c335d205d3c6bde102067e0bf2b7d6a9"}, + {file = "docling_parse-2.0.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:156f34124408a1d016e6a3e1c5a82f58e43c96acc8f3896e81bfb2b5ecc127d5"}, + {file = "docling_parse-2.0.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:32f6e791bceb3b1cac357878929ec976aeb50c40b395518934f4817bb2530eae"}, + {file = "docling_parse-2.0.4-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:580b01b9276845a410d3aa59397cacb06ad3cf4f471bdfd18187ac0dfdcaaafc"}, + {file = "docling_parse-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4fce1f091aed82e16726658174d06098642c197ce1ded9508571aa2416a2a03"}, + {file = "docling_parse-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d5447cce907ba6725609346f04d38a83671d2e0b13b468d27a0a861d96af144"}, + {file = "docling_parse-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:ce2120287efe4fe408795cfeea881a71d6980527a46ee583a69247e8404d4c0b"}, + {file = "docling_parse-2.0.4-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:52c94fe627382541e13a8e7fbad8242b618636db55eeeeacc6e92dbf88130812"}, + {file = "docling_parse-2.0.4-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:10c7a2e68a124ebb54b1e27ce6c85ef2f4d9da294e391fc131a9b39b1f9ce657"}, + {file = "docling_parse-2.0.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:43dc41995310ed0b0015bea6f72df7cb71106a8550d79946f66f30b2ab2c3a29"}, + {file = "docling_parse-2.0.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f385d97cb0cf0933a5f0eb4da8b0f9fc9d8629bbf93d57b9043b7a51ba0b33c8"}, + {file = "docling_parse-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:449c449168cada11eaa83a779e2c25ed4e9e9aec63db2012222ee28fa048a020"}, + {file = "docling_parse-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dbf20715dbbb9b7d5ff49475b65ce88454c43c0b00bb8ec5bda30643c79003"}, + {file = "docling_parse-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e56726829cb82977f5441db4e1f4d9357faf3ed3dfd55bfa135e650d476a8d8"}, + {file = "docling_parse-2.0.4-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:60c560ed7fdfda1748dca23c858d2d5eb0eff5858fef060bfc4851e1f949e915"}, + {file = "docling_parse-2.0.4-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:d35c8c3dd8f580820ec8905be48e37a36f8c3fe8cacbe366ba75c7c35e0de938"}, + {file = "docling_parse-2.0.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:419dabf6aa0f895878d489a95bdd173661d0891674638c6c01a9b5ca8f156839"}, + {file = "docling_parse-2.0.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ff7fb21829aa2acad6874ac78b87cfaa642b0910ae6d60e90007c2021fe05c73"}, + {file = "docling_parse-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:132e7db9042f13141ec089562478737fb8df70fcd33a0cb0161c7e6cfebf5b46"}, + {file = "docling_parse-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b1ccc13bb32b5c5877f9c3f8870a88beb56d1ab3335ce8a81561cdba1054dfb"}, + {file = "docling_parse-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:ac34fae4e0080dd8719c22a4aa49a013003a13f3f6bf68f5763136ac7626e390"}, + {file = "docling_parse-2.0.4-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:e8cc56e41ae4caf4302ebeaaeb02de2b60edcf5ed4bdcdf13a67eca0c1b9f39a"}, + {file = "docling_parse-2.0.4-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:bc2efba8183356c6437a62e9802055988f5edc2d907ea1a42a2613737b2fc77e"}, + {file = "docling_parse-2.0.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:db839a2a7a8742b93a5cab4d91c664938306d248177bc5b716527003c32054a3"}, + {file = "docling_parse-2.0.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:737fb79b6c91a676ac7cdf4ced65c85f687a968b9d1d2ef95b04958fbbc554ff"}, + {file = "docling_parse-2.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c02edd935eb5d4d3b4a64564ac92f6a427bb106cb5632f745d853a6ba7b7441"}, + {file = "docling_parse-2.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e84a3c50086380fff7925cfd9e9e4e62b2d2f4b79660520999f39207d478b18"}, + {file = "docling_parse-2.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:99cfb99c1fc65573a45e2c99b98cc6483134451d42a81b9f4cea27e4e858415e"}, + {file = "docling_parse-2.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2e2dbe4e18b6aa2f2fe8801685846d7b6a9bb355d6eac48b697cd9d1b62501e1"}, + {file = "docling_parse-2.0.4.tar.gz", hash = "sha256:bdcdfe070509e137846108056931e3738ad3225fcb31ed1496e9368690c3036d"}, ] [package.dependencies] @@ -1356,70 +1341,70 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", [[package]] name = "grpcio" -version = "1.67.1" +version = "1.68.0" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, - {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0"}, - {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa"}, - {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292"}, - {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311"}, - {file = "grpcio-1.67.1-cp310-cp310-win32.whl", hash = "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed"}, - {file = "grpcio-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e"}, - {file = "grpcio-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb"}, - {file = "grpcio-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc"}, - {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96"}, - {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f"}, - {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970"}, - {file = "grpcio-1.67.1-cp311-cp311-win32.whl", hash = "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744"}, - {file = "grpcio-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5"}, - {file = "grpcio-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953"}, - {file = "grpcio-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af"}, - {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e"}, - {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75"}, - {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38"}, - {file = "grpcio-1.67.1-cp312-cp312-win32.whl", hash = "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78"}, - {file = "grpcio-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc"}, - {file = "grpcio-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b"}, - {file = "grpcio-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955"}, - {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8"}, - {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62"}, - {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb"}, - {file = "grpcio-1.67.1-cp313-cp313-win32.whl", hash = "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121"}, - {file = "grpcio-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba"}, - {file = "grpcio-1.67.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65"}, - {file = "grpcio-1.67.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085"}, - {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3"}, - {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8"}, - {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce"}, - {file = "grpcio-1.67.1-cp38-cp38-win32.whl", hash = "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46"}, - {file = "grpcio-1.67.1-cp38-cp38-win_amd64.whl", hash = "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771"}, - {file = "grpcio-1.67.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335"}, - {file = "grpcio-1.67.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d"}, - {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04"}, - {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8"}, - {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f"}, - {file = "grpcio-1.67.1-cp39-cp39-win32.whl", hash = "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e"}, - {file = "grpcio-1.67.1-cp39-cp39-win_amd64.whl", hash = "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98"}, - {file = "grpcio-1.67.1.tar.gz", hash = "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732"}, + {file = "grpcio-1.68.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544"}, + {file = "grpcio-1.68.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121"}, + {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618"}, + {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1"}, + {file = "grpcio-1.68.0-cp310-cp310-win32.whl", hash = "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b"}, + {file = "grpcio-1.68.0-cp310-cp310-win_amd64.whl", hash = "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a"}, + {file = "grpcio-1.68.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415"}, + {file = "grpcio-1.68.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4"}, + {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1"}, + {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75"}, + {file = "grpcio-1.68.0-cp311-cp311-win32.whl", hash = "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc"}, + {file = "grpcio-1.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27"}, + {file = "grpcio-1.68.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d"}, + {file = "grpcio-1.68.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b"}, + {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd"}, + {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659"}, + {file = "grpcio-1.68.0-cp312-cp312-win32.whl", hash = "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332"}, + {file = "grpcio-1.68.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9"}, + {file = "grpcio-1.68.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e"}, + {file = "grpcio-1.68.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb"}, + {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d"}, + {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665"}, + {file = "grpcio-1.68.0-cp313-cp313-win32.whl", hash = "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03"}, + {file = "grpcio-1.68.0-cp313-cp313-win_amd64.whl", hash = "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a"}, + {file = "grpcio-1.68.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3"}, + {file = "grpcio-1.68.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f"}, + {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829"}, + {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161"}, + {file = "grpcio-1.68.0-cp38-cp38-win32.whl", hash = "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78"}, + {file = "grpcio-1.68.0-cp38-cp38-win_amd64.whl", hash = "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5"}, + {file = "grpcio-1.68.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354"}, + {file = "grpcio-1.68.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2"}, + {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3"}, + {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363"}, + {file = "grpcio-1.68.0-cp39-cp39-win32.whl", hash = "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a"}, + {file = "grpcio-1.68.0-cp39-cp39-win_amd64.whl", hash = "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490"}, + {file = "grpcio-1.68.0.tar.gz", hash = "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.67.1)"] +protobuf = ["grpcio-tools (>=1.68.0)"] [[package]] name = "h11" @@ -1434,13 +1419,13 @@ files = [ [[package]] name = "httpcore" -version = "1.0.6" +version = "1.0.7" description = "A minimal low-level HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpcore-1.0.6-py3-none-any.whl", hash = "sha256:27b59625743b85577a8c0e10e55b50b5368a4f2cfe8cc7bcfa9cf00829c2682f"}, - {file = "httpcore-1.0.6.tar.gz", hash = "sha256:73f6dbd6eb8c21bbf7ef8efad555481853f5f6acdeaff1edb0694289269ee17f"}, + {file = "httpcore-1.0.7-py3-none-any.whl", hash = "sha256:a3fff8f43dc260d5bd363d9f9cf1830fa3a458b332856f34282de498ed420edd"}, + {file = "httpcore-1.0.7.tar.gz", hash = "sha256:8551cb62a169ec7162ac7be8d4817d561f60e08eaa485234898414bb5a8a0b4c"}, ] [package.dependencies] @@ -1514,13 +1499,13 @@ typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "t [[package]] name = "identify" -version = "2.6.1" +version = "2.6.2" description = "File identification library for Python" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "identify-2.6.1-py2.py3-none-any.whl", hash = "sha256:53863bcac7caf8d2ed85bd20312ea5dcfc22226800f6d6881f232d861db5a8f0"}, - {file = "identify-2.6.1.tar.gz", hash = "sha256:91478c5fb7c3aac5ff7bf9b4344f803843dc586832d5f110d672b19aa1984c98"}, + {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, + {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, ] [package.extras] @@ -1784,22 +1769,22 @@ type = ["pytest-mypy"] [[package]] name = "jedi" -version = "0.19.1" +version = "0.19.2" description = "An autocompletion tool for Python that can be used for text editors." optional = false python-versions = ">=3.6" files = [ - {file = "jedi-0.19.1-py2.py3-none-any.whl", hash = "sha256:e983c654fe5c02867aef4cdfce5a2fbb4a50adc0af145f70504238f18ef5e7e0"}, - {file = "jedi-0.19.1.tar.gz", hash = "sha256:cf0496f3651bc65d7174ac1b7d043eff454892c708a87d1b683e57b569927ffd"}, + {file = "jedi-0.19.2-py2.py3-none-any.whl", hash = "sha256:a8ef22bde8490f57fe5c7681a3c83cb58874daf72b4784de3cce5b6ef6edb5b9"}, + {file = "jedi-0.19.2.tar.gz", hash = "sha256:4770dc3de41bde3966b02eb84fbcf557fb33cce26ad23da12c742fb50ecb11f0"}, ] [package.dependencies] -parso = ">=0.8.3,<0.9.0" +parso = ">=0.8.4,<0.9.0" [package.extras] docs = ["Jinja2 (==2.11.3)", "MarkupSafe (==1.1.1)", "Pygments (==2.8.1)", "alabaster (==0.7.12)", "babel (==2.9.1)", "chardet (==4.0.0)", "commonmark (==0.8.1)", "docutils (==0.17.1)", "future (==0.18.2)", "idna (==2.10)", "imagesize (==1.2.0)", "mock (==1.0.1)", "packaging (==20.9)", "pyparsing (==2.4.7)", "pytz (==2021.1)", "readthedocs-sphinx-ext (==2.1.4)", "recommonmark (==0.5.0)", "requests (==2.25.1)", "six (==1.15.0)", "snowballstemmer (==2.1.0)", "sphinx (==1.8.5)", "sphinx-rtd-theme (==0.4.3)", "sphinxcontrib-serializinghtml (==1.1.4)", "sphinxcontrib-websupport (==1.2.4)", "urllib3 (==1.26.4)"] qa = ["flake8 (==5.0.4)", "mypy (==0.971)", "types-setuptools (==67.2.0.1)"] -testing = ["Django", "attrs", "colorama", "docopt", "pytest (<7.0.0)"] +testing = ["Django", "attrs", "colorama", "docopt", "pytest (<9.0.0)"] [[package]] name = "jeepney" @@ -2053,13 +2038,13 @@ type = ["pygobject-stubs", "pytest-mypy", "shtab", "types-pywin32"] [[package]] name = "langchain-core" -version = "0.2.41" +version = "0.2.43" description = "Building applications with LLMs through composability" optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langchain_core-0.2.41-py3-none-any.whl", hash = "sha256:3278fda5ba9a05defae8bb19f1226032add6aab21917db7b3bc74e750e263e84"}, - {file = "langchain_core-0.2.41.tar.gz", hash = "sha256:bc12032c5a298d85be754ccb129bc13ea21ccb1d6e22f8d7ba18b8da64315bb5"}, + {file = "langchain_core-0.2.43-py3-none-any.whl", hash = "sha256:619601235113298ebf8252a349754b7c28d3cf7166c7c922da24944b78a9363a"}, + {file = "langchain_core-0.2.43.tar.gz", hash = "sha256:42c2ef6adedb911f4254068b6adc9eb4c4075f6c8cb3d83590d3539a815695f5"}, ] [package.dependencies] @@ -2067,8 +2052,8 @@ jsonpatch = ">=1.33,<2.0" langsmith = ">=0.1.112,<0.2.0" packaging = ">=23.2,<25" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" @@ -2094,13 +2079,13 @@ transformers = ">=4.39.0" [[package]] name = "langchain-milvus" -version = "0.1.6" +version = "0.1.7" description = "An integration package connecting Milvus and LangChain" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "langchain_milvus-0.1.6-py3-none-any.whl", hash = "sha256:efab3fcf613bd6151735e2c75f3264dba9daecb317b9bb22604c2aac579049a9"}, - {file = "langchain_milvus-0.1.6.tar.gz", hash = "sha256:155979a6e5aeb94b0e141a12d2fdb4c34a4d7a0e5da2cec1ae7c9bccf6649205"}, + {file = "langchain_milvus-0.1.7-py3-none-any.whl", hash = "sha256:8d7bef9e7524772db788f996ef9638dea431c034a36cf92a70a31d522eb8ee31"}, + {file = "langchain_milvus-0.1.7.tar.gz", hash = "sha256:6cc4b58803c853be6766c6ed68723e244e9af101c3cd52e22ccfc05c96b2107c"}, ] [package.dependencies] @@ -2123,21 +2108,21 @@ langchain-core = ">=0.2.38,<0.3.0" [[package]] name = "langsmith" -version = "0.1.137" +version = "0.1.143" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.137-py3-none-any.whl", hash = "sha256:4256d5c61133749890f7b5c88321dbb133ce0f440c621ea28e76513285859b81"}, - {file = "langsmith-0.1.137.tar.gz", hash = "sha256:56cdfcc6c74cb20a3f437d5bd144feb5bf93f54c5a2918d1e568cbd084a372d4"}, + {file = "langsmith-0.1.143-py3-none-any.whl", hash = "sha256:ba0d827269e9b03a90fababe41fa3e4e3f833300b95add10184f7e67167dde6f"}, + {file = "langsmith-0.1.143.tar.gz", hash = "sha256:4c5159e5cd84b3f8499433009e72d2076dd2daf6c044ac8a3611b30d0d0161c5"}, ] [package.dependencies] httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" @@ -2209,111 +2194,157 @@ files = [ [[package]] name = "lxml" -version = "4.9.4" +version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.11)"] [[package]] name = "markdown" @@ -2442,13 +2473,13 @@ files = [ [[package]] name = "marshmallow" -version = "3.23.0" +version = "3.23.1" description = "A lightweight library for converting complex datatypes to and from native Python datatypes." optional = false python-versions = ">=3.9" files = [ - {file = "marshmallow-3.23.0-py3-none-any.whl", hash = "sha256:82f20a2397834fe6d9611b241f2f7e7b680ed89c49f84728a1ad937be6b4bdf4"}, - {file = "marshmallow-3.23.0.tar.gz", hash = "sha256:98d8827a9f10c03d44ead298d2e99c6aea8197df18ccfad360dae7f89a50da2e"}, + {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, + {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, ] [package.dependencies] @@ -2456,7 +2487,7 @@ packaging = ">=17.0" [package.extras] dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.13)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] +docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] tests = ["pytest", "simplejson"] [[package]] @@ -2649,13 +2680,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.42" +version = "9.5.44" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.42-py3-none-any.whl", hash = "sha256:452a7c5d21284b373f36b981a2cbebfff59263feebeede1bc28652e9c5bbe316"}, - {file = "mkdocs_material-9.5.42.tar.gz", hash = "sha256:92779b5e9b5934540c574c11647131d217dc540dce72b05feeda088c8eb1b8f2"}, + {file = "mkdocs_material-9.5.44-py3-none-any.whl", hash = "sha256:47015f9c167d58a5ff5e682da37441fc4d66a1c79334bfc08d774763cacf69ca"}, + {file = "mkdocs_material-9.5.44.tar.gz", hash = "sha256:f3a6c968e524166b3f3ed1fb97d3ed3e0091183b0545cedf7156a2a6804c56c0"}, ] [package.dependencies] @@ -2989,13 +3020,13 @@ test = ["pep440", "pre-commit", "pytest", "testpath"] [[package]] name = "nbqa" -version = "1.9.0" +version = "1.9.1" description = "Run any standard Python code quality tool on a Jupyter Notebook" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9" files = [ - {file = "nbqa-1.9.0-py3-none-any.whl", hash = "sha256:89da6b55ce0b47b5e8be45c5b94404e1d861e45df36959dd34a5d15cf45141ea"}, - {file = "nbqa-1.9.0.tar.gz", hash = "sha256:48c0acd83675bd6d086efba3885e1137d9475c0da328c74f46b9acbc664fe36f"}, + {file = "nbqa-1.9.1-py3-none-any.whl", hash = "sha256:95552d2f6c2c038136252a805aa78d85018aef922586270c3a074332737282e5"}, + {file = "nbqa-1.9.1.tar.gz", hash = "sha256:a1f4bcf587c597302fed295951001fc4e1be4ce0e77e1ab1b25ac2fbe3db0cdd"}, ] [package.dependencies] @@ -3147,64 +3178,66 @@ files = [ [[package]] name = "numpy" -version = "2.1.2" +version = "2.1.3" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.10" files = [ - {file = "numpy-2.1.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:30d53720b726ec36a7f88dc873f0eec8447fbc93d93a8f079dfac2629598d6ee"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e8d3ca0a72dd8846eb6f7dfe8f19088060fcb76931ed592d29128e0219652884"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fc44e3c68ff00fd991b59092a54350e6e4911152682b4782f68070985aa9e648"}, - {file = "numpy-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:7c1c60328bd964b53f8b835df69ae8198659e2b9302ff9ebb7de4e5a5994db3d"}, - {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6cdb606a7478f9ad91c6283e238544451e3a95f30fb5467fbf715964341a8a86"}, - {file = "numpy-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d666cb72687559689e9906197e3bec7b736764df6a2e58ee265e360663e9baf7"}, - {file = "numpy-2.1.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c6eef7a2dbd0abfb0d9eaf78b73017dbfd0b54051102ff4e6a7b2980d5ac1a03"}, - {file = "numpy-2.1.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:12edb90831ff481f7ef5f6bc6431a9d74dc0e5ff401559a71e5e4611d4f2d466"}, - {file = "numpy-2.1.2-cp310-cp310-win32.whl", hash = "sha256:a65acfdb9c6ebb8368490dbafe83c03c7e277b37e6857f0caeadbbc56e12f4fb"}, - {file = "numpy-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:860ec6e63e2c5c2ee5e9121808145c7bf86c96cca9ad396c0bd3e0f2798ccbe2"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b42a1a511c81cc78cbc4539675713bbcf9d9c3913386243ceff0e9429ca892fe"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:faa88bc527d0f097abdc2c663cddf37c05a1c2f113716601555249805cf573f1"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:c82af4b2ddd2ee72d1fc0c6695048d457e00b3582ccde72d8a1c991b808bb20f"}, - {file = "numpy-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:13602b3174432a35b16c4cfb5de9a12d229727c3dd47a6ce35111f2ebdf66ff4"}, - {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1ebec5fd716c5a5b3d8dfcc439be82a8407b7b24b230d0ad28a81b61c2f4659a"}, - {file = "numpy-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2b49c3c0804e8ecb05d59af8386ec2f74877f7ca8fd9c1e00be2672e4d399b1"}, - {file = "numpy-2.1.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:2cbba4b30bf31ddbe97f1c7205ef976909a93a66bb1583e983adbd155ba72ac2"}, - {file = "numpy-2.1.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8e00ea6fc82e8a804433d3e9cedaa1051a1422cb6e443011590c14d2dea59146"}, - {file = "numpy-2.1.2-cp311-cp311-win32.whl", hash = "sha256:5006b13a06e0b38d561fab5ccc37581f23c9511879be7693bd33c7cd15ca227c"}, - {file = "numpy-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:f1eb068ead09f4994dec71c24b2844f1e4e4e013b9629f812f292f04bd1510d9"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d7bf0a4f9f15b32b5ba53147369e94296f5fffb783db5aacc1be15b4bf72f43b"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b1d0fcae4f0949f215d4632be684a539859b295e2d0cb14f78ec231915d644db"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:f751ed0a2f250541e19dfca9f1eafa31a392c71c832b6bb9e113b10d050cb0f1"}, - {file = "numpy-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:bd33f82e95ba7ad632bc57837ee99dba3d7e006536200c4e9124089e1bf42426"}, - {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1b8cde4f11f0a975d1fd59373b32e2f5a562ade7cde4f85b7137f3de8fbb29a0"}, - {file = "numpy-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6d95f286b8244b3649b477ac066c6906fbb2905f8ac19b170e2175d3d799f4df"}, - {file = "numpy-2.1.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:ab4754d432e3ac42d33a269c8567413bdb541689b02d93788af4131018cbf366"}, - {file = "numpy-2.1.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:e585c8ae871fd38ac50598f4763d73ec5497b0de9a0ab4ef5b69f01c6a046142"}, - {file = "numpy-2.1.2-cp312-cp312-win32.whl", hash = "sha256:9c6c754df29ce6a89ed23afb25550d1c2d5fdb9901d9c67a16e0b16eaf7e2550"}, - {file = "numpy-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:456e3b11cb79ac9946c822a56346ec80275eaf2950314b249b512896c0d2505e"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:a84498e0d0a1174f2b3ed769b67b656aa5460c92c9554039e11f20a05650f00d"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4d6ec0d4222e8ffdab1744da2560f07856421b367928026fb540e1945f2eeeaf"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:259ec80d54999cc34cd1eb8ded513cb053c3bf4829152a2e00de2371bd406f5e"}, - {file = "numpy-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:675c741d4739af2dc20cd6c6a5c4b7355c728167845e3c6b0e824e4e5d36a6c3"}, - {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b2d4e667895cc55e3ff2b56077e4c8a5604361fc21a042845ea3ad67465aa8"}, - {file = "numpy-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43cca367bf94a14aca50b89e9bc2061683116cfe864e56740e083392f533ce7a"}, - {file = "numpy-2.1.2-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:76322dcdb16fccf2ac56f99048af32259dcc488d9b7e25b51e5eca5147a3fb98"}, - {file = "numpy-2.1.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:32e16a03138cabe0cb28e1007ee82264296ac0983714094380b408097a418cfe"}, - {file = "numpy-2.1.2-cp313-cp313-win32.whl", hash = "sha256:242b39d00e4944431a3cd2db2f5377e15b5785920421993770cddb89992c3f3a"}, - {file = "numpy-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:f2ded8d9b6f68cc26f8425eda5d3877b47343e68ca23d0d0846f4d312ecaa445"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:2ffef621c14ebb0188a8633348504a35c13680d6da93ab5cb86f4e54b7e922b5"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:ad369ed238b1959dfbade9018a740fb9392c5ac4f9b5173f420bd4f37ba1f7a0"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:d82075752f40c0ddf57e6e02673a17f6cb0f8eb3f587f63ca1eaab5594da5b17"}, - {file = "numpy-2.1.2-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:1600068c262af1ca9580a527d43dc9d959b0b1d8e56f8a05d830eea39b7c8af6"}, - {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a26ae94658d3ba3781d5e103ac07a876b3e9b29db53f68ed7df432fd033358a8"}, - {file = "numpy-2.1.2-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13311c2db4c5f7609b462bc0f43d3c465424d25c626d95040f073e30f7570e35"}, - {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:2abbf905a0b568706391ec6fa15161fad0fb5d8b68d73c461b3c1bab6064dd62"}, - {file = "numpy-2.1.2-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:ef444c57d664d35cac4e18c298c47d7b504c66b17c2ea91312e979fcfbdfb08a"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:bdd407c40483463898b84490770199d5714dcc9dd9b792f6c6caccc523c00952"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:da65fb46d4cbb75cb417cddf6ba5e7582eb7bb0b47db4b99c9fe5787ce5d91f5"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c193d0b0238638e6fc5f10f1b074a6993cb13b0b431f64079a509d63d3aa8b7"}, - {file = "numpy-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a7d80b2e904faa63068ead63107189164ca443b42dd1930299e0d1cb041cec2e"}, - {file = "numpy-2.1.2.tar.gz", hash = "sha256:13532a088217fa624c99b843eeb54640de23b3414b14aa66d023805eb731066c"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c894b4305373b9c5576d7a12b473702afdf48ce5369c074ba304cc5ad8730dff"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:b47fbb433d3260adcd51eb54f92a2ffbc90a4595f8970ee00e064c644ac788f5"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:825656d0743699c529c5943554d223c021ff0494ff1442152ce887ef4f7561a1"}, + {file = "numpy-2.1.3-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6a4825252fcc430a182ac4dee5a505053d262c807f8a924603d411f6718b88fd"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e711e02f49e176a01d0349d82cb5f05ba4db7d5e7e0defd026328e5cfb3226d3"}, + {file = "numpy-2.1.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78574ac2d1a4a02421f25da9559850d59457bac82f2b8d7a44fe83a64f770098"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c7662f0e3673fe4e832fe07b65c50342ea27d989f92c80355658c7f888fcc83c"}, + {file = "numpy-2.1.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:fa2d1337dc61c8dc417fbccf20f6d1e139896a30721b7f1e832b2bb6ef4eb6c4"}, + {file = "numpy-2.1.3-cp310-cp310-win32.whl", hash = "sha256:72dcc4a35a8515d83e76b58fdf8113a5c969ccd505c8a946759b24e3182d1f23"}, + {file = "numpy-2.1.3-cp310-cp310-win_amd64.whl", hash = "sha256:ecc76a9ba2911d8d37ac01de72834d8849e55473457558e12995f4cd53e778e0"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4d1167c53b93f1f5d8a139a742b3c6f4d429b54e74e6b57d0eff40045187b15d"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c80e4a09b3d95b4e1cac08643f1152fa71a0a821a2d4277334c88d54b2219a41"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:576a1c1d25e9e02ed7fa5477f30a127fe56debd53b8d2c89d5578f9857d03ca9"}, + {file = "numpy-2.1.3-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:973faafebaae4c0aaa1a1ca1ce02434554d67e628b8d805e61f874b84e136b09"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:762479be47a4863e261a840e8e01608d124ee1361e48b96916f38b119cfda04a"}, + {file = "numpy-2.1.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc6f24b3d1ecc1eebfbf5d6051faa49af40b03be1aaa781ebdadcbc090b4539b"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:17ee83a1f4fef3c94d16dc1802b998668b5419362c8a4f4e8a491de1b41cc3ee"}, + {file = "numpy-2.1.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:15cb89f39fa6d0bdfb600ea24b250e5f1a3df23f901f51c8debaa6a5d122b2f0"}, + {file = "numpy-2.1.3-cp311-cp311-win32.whl", hash = "sha256:d9beb777a78c331580705326d2367488d5bc473b49a9bc3036c154832520aca9"}, + {file = "numpy-2.1.3-cp311-cp311-win_amd64.whl", hash = "sha256:d89dd2b6da69c4fff5e39c28a382199ddedc3a5be5390115608345dec660b9e2"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:f55ba01150f52b1027829b50d70ef1dafd9821ea82905b63936668403c3b471e"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13138eadd4f4da03074851a698ffa7e405f41a0845a6b1ad135b81596e4e9958"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:a6b46587b14b888e95e4a24d7b13ae91fa22386c199ee7b418f449032b2fa3b8"}, + {file = "numpy-2.1.3-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:0fa14563cc46422e99daef53d725d0c326e99e468a9320a240affffe87852564"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8637dcd2caa676e475503d1f8fdb327bc495554e10838019651b76d17b98e512"}, + {file = "numpy-2.1.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2312b2aa89e1f43ecea6da6ea9a810d06aae08321609d8dc0d0eda6d946a541b"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a38c19106902bb19351b83802531fea19dee18e5b37b36454f27f11ff956f7fc"}, + {file = "numpy-2.1.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:02135ade8b8a84011cbb67dc44e07c58f28575cf9ecf8ab304e51c05528c19f0"}, + {file = "numpy-2.1.3-cp312-cp312-win32.whl", hash = "sha256:e6988e90fcf617da2b5c78902fe8e668361b43b4fe26dbf2d7b0f8034d4cafb9"}, + {file = "numpy-2.1.3-cp312-cp312-win_amd64.whl", hash = "sha256:0d30c543f02e84e92c4b1f415b7c6b5326cbe45ee7882b6b77db7195fb971e3a"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:96fe52fcdb9345b7cd82ecd34547fca4321f7656d500eca497eb7ea5a926692f"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f653490b33e9c3a4c1c01d41bc2aef08f9475af51146e4a7710c450cf9761598"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:dc258a761a16daa791081d026f0ed4399b582712e6fc887a95af09df10c5ca57"}, + {file = "numpy-2.1.3-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:016d0f6f5e77b0f0d45d77387ffa4bb89816b57c835580c3ce8e099ef830befe"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c181ba05ce8299c7aa3125c27b9c2167bca4a4445b7ce73d5febc411ca692e43"}, + {file = "numpy-2.1.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5641516794ca9e5f8a4d17bb45446998c6554704d888f86df9b200e66bdcce56"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ea4dedd6e394a9c180b33c2c872b92f7ce0f8e7ad93e9585312b0c5a04777a4a"}, + {file = "numpy-2.1.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b0df3635b9c8ef48bd3be5f862cf71b0a4716fa0e702155c45067c6b711ddcef"}, + {file = "numpy-2.1.3-cp313-cp313-win32.whl", hash = "sha256:50ca6aba6e163363f132b5c101ba078b8cbd3fa92c7865fd7d4d62d9779ac29f"}, + {file = "numpy-2.1.3-cp313-cp313-win_amd64.whl", hash = "sha256:747641635d3d44bcb380d950679462fae44f54b131be347d5ec2bce47d3df9ed"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:996bb9399059c5b82f76b53ff8bb686069c05acc94656bb259b1d63d04a9506f"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:45966d859916ad02b779706bb43b954281db43e185015df6eb3323120188f9e4"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_arm64.whl", hash = "sha256:baed7e8d7481bfe0874b566850cb0b85243e982388b7b23348c6db2ee2b2ae8e"}, + {file = "numpy-2.1.3-cp313-cp313t-macosx_14_0_x86_64.whl", hash = "sha256:a9f7f672a3388133335589cfca93ed468509cb7b93ba3105fce780d04a6576a0"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7aac50327da5d208db2eec22eb11e491e3fe13d22653dce51b0f4109101b408"}, + {file = "numpy-2.1.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4394bc0dbd074b7f9b52024832d16e019decebf86caf909d94f6b3f77a8ee3b6"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_1_x86_64.whl", hash = "sha256:50d18c4358a0a8a53f12a8ba9d772ab2d460321e6a93d6064fc22443d189853f"}, + {file = "numpy-2.1.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:14e253bd43fc6b37af4921b10f6add6925878a42a0c5fe83daee390bca80bc17"}, + {file = "numpy-2.1.3-cp313-cp313t-win32.whl", hash = "sha256:08788d27a5fd867a663f6fc753fd7c3ad7e92747efc73c53bca2f19f8bc06f48"}, + {file = "numpy-2.1.3-cp313-cp313t-win_amd64.whl", hash = "sha256:2564fbdf2b99b3f815f2107c1bbc93e2de8ee655a69c261363a1172a79a257d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:4f2015dfe437dfebbfce7c85c7b53d81ba49e71ba7eadbf1df40c915af75979f"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-macosx_14_0_x86_64.whl", hash = "sha256:3522b0dfe983a575e6a9ab3a4a4dfe156c3e428468ff08ce582b9bb6bd1d71d4"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c006b607a865b07cd981ccb218a04fc86b600411d83d6fc261357f1c0966755d"}, + {file = "numpy-2.1.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:e14e26956e6f1696070788252dcdff11b4aca4c3e8bd166e0df1bb8f315a67cb"}, + {file = "numpy-2.1.3.tar.gz", hash = "sha256:aa08e04e08aaf974d4458def539dece0d28146d866a39da5639596f4921fd761"}, ] [[package]] @@ -3522,88 +3555,88 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] name = "orjson" -version = "3.10.10" +version = "3.10.11" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.10-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:b788a579b113acf1c57e0a68e558be71d5d09aa67f62ca1f68e01117e550a998"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:804b18e2b88022c8905bb79bd2cbe59c0cd014b9328f43da8d3b28441995cda4"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9972572a1d042ec9ee421b6da69f7cc823da5962237563fa548ab17f152f0b9b"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc6993ab1c2ae7dd0711161e303f1db69062955ac2668181bfdf2dd410e65258"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d78e4cacced5781b01d9bc0f0cd8b70b906a0e109825cb41c1b03f9c41e4ce86"}, - {file = "orjson-3.10.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e6eb2598df518281ba0cbc30d24c5b06124ccf7e19169e883c14e0831217a0bc"}, - {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:23776265c5215ec532de6238a52707048401a568f0fa0d938008e92a147fe2c7"}, - {file = "orjson-3.10.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8cc2a654c08755cef90b468ff17c102e2def0edd62898b2486767204a7f5cc9c"}, - {file = "orjson-3.10.10-cp310-none-win32.whl", hash = "sha256:081b3fc6a86d72efeb67c13d0ea7c030017bd95f9868b1e329a376edc456153b"}, - {file = "orjson-3.10.10-cp310-none-win_amd64.whl", hash = "sha256:ff38c5fb749347768a603be1fb8a31856458af839f31f064c5aa74aca5be9efe"}, - {file = "orjson-3.10.10-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:879e99486c0fbb256266c7c6a67ff84f46035e4f8749ac6317cc83dacd7f993a"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:019481fa9ea5ff13b5d5d95e6fd5ab25ded0810c80b150c2c7b1cc8660b662a7"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0dd57eff09894938b4c86d4b871a479260f9e156fa7f12f8cad4b39ea8028bb5"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dbde6d70cd95ab4d11ea8ac5e738e30764e510fc54d777336eec09bb93b8576c"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b2625cb37b8fb42e2147404e5ff7ef08712099197a9cd38895006d7053e69d6"}, - {file = "orjson-3.10.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dbf3c20c6a7db69df58672a0d5815647ecf78c8e62a4d9bd284e8621c1fe5ccb"}, - {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:75c38f5647e02d423807d252ce4528bf6a95bd776af999cb1fb48867ed01d1f6"}, - {file = "orjson-3.10.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:23458d31fa50ec18e0ec4b0b4343730928296b11111df5f547c75913714116b2"}, - {file = "orjson-3.10.10-cp311-none-win32.whl", hash = "sha256:2787cd9dedc591c989f3facd7e3e86508eafdc9536a26ec277699c0aa63c685b"}, - {file = "orjson-3.10.10-cp311-none-win_amd64.whl", hash = "sha256:6514449d2c202a75183f807bc755167713297c69f1db57a89a1ef4a0170ee269"}, - {file = "orjson-3.10.10-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:8564f48f3620861f5ef1e080ce7cd122ee89d7d6dacf25fcae675ff63b4d6e05"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5bf161a32b479034098c5b81f2608f09167ad2fa1c06abd4e527ea6bf4837a9"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:68b65c93617bcafa7f04b74ae8bc2cc214bd5cb45168a953256ff83015c6747d"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e8e28406f97fc2ea0c6150f4c1b6e8261453318930b334abc419214c82314f85"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4d0d9fe174cc7a5bdce2e6c378bcdb4c49b2bf522a8f996aa586020e1b96cee"}, - {file = "orjson-3.10.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b3be81c42f1242cbed03cbb3973501fcaa2675a0af638f8be494eaf37143d999"}, - {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:65f9886d3bae65be026219c0a5f32dbbe91a9e6272f56d092ab22561ad0ea33b"}, - {file = "orjson-3.10.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:730ed5350147db7beb23ddaf072f490329e90a1d059711d364b49fe352ec987b"}, - {file = "orjson-3.10.10-cp312-none-win32.whl", hash = "sha256:a8f4bf5f1c85bea2170800020d53a8877812892697f9c2de73d576c9307a8a5f"}, - {file = "orjson-3.10.10-cp312-none-win_amd64.whl", hash = "sha256:384cd13579a1b4cd689d218e329f459eb9ddc504fa48c5a83ef4889db7fd7a4f"}, - {file = "orjson-3.10.10-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:44bffae68c291f94ff5a9b4149fe9d1bdd4cd0ff0fb575bcea8351d48db629a1"}, - {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e27b4c6437315df3024f0835887127dac2a0a3ff643500ec27088d2588fa5ae1"}, - {file = "orjson-3.10.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca84df16d6b49325a4084fd8b2fe2229cb415e15c46c529f868c3387bb1339d"}, - {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c14ce70e8f39bd71f9f80423801b5d10bf93d1dceffdecd04df0f64d2c69bc01"}, - {file = "orjson-3.10.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:24ac62336da9bda1bd93c0491eff0613003b48d3cb5d01470842e7b52a40d5b4"}, - {file = "orjson-3.10.10-cp313-none-win32.whl", hash = "sha256:eb0a42831372ec2b05acc9ee45af77bcaccbd91257345f93780a8e654efc75db"}, - {file = "orjson-3.10.10-cp313-none-win_amd64.whl", hash = "sha256:f0c4f37f8bf3f1075c6cc8dd8a9f843689a4b618628f8812d0a71e6968b95ffd"}, - {file = "orjson-3.10.10-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:829700cc18503efc0cf502d630f612884258020d98a317679cd2054af0259568"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e0ceb5e0e8c4f010ac787d29ae6299846935044686509e2f0f06ed441c1ca949"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0c25908eb86968613216f3db4d3003f1c45d78eb9046b71056ca327ff92bdbd4"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:218cb0bc03340144b6328a9ff78f0932e642199ac184dd74b01ad691f42f93ff"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e2277ec2cea3775640dc81ab5195bb5b2ada2fe0ea6eee4677474edc75ea6785"}, - {file = "orjson-3.10.10-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:848ea3b55ab5ccc9d7bbd420d69432628b691fba3ca8ae3148c35156cbd282aa"}, - {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:e3e67b537ac0c835b25b5f7d40d83816abd2d3f4c0b0866ee981a045287a54f3"}, - {file = "orjson-3.10.10-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:7948cfb909353fce2135dcdbe4521a5e7e1159484e0bb024c1722f272488f2b8"}, - {file = "orjson-3.10.10-cp38-none-win32.whl", hash = "sha256:78bee66a988f1a333dc0b6257503d63553b1957889c17b2c4ed72385cd1b96ae"}, - {file = "orjson-3.10.10-cp38-none-win_amd64.whl", hash = "sha256:f1d647ca8d62afeb774340a343c7fc023efacfd3a39f70c798991063f0c681dd"}, - {file = "orjson-3.10.10-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:5a059afddbaa6dd733b5a2d76a90dbc8af790b993b1b5cb97a1176ca713b5df8"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f9b5c59f7e2a1a410f971c5ebc68f1995822837cd10905ee255f96074537ee6"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d5ef198bafdef4aa9d49a4165ba53ffdc0a9e1c7b6f76178572ab33118afea25"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aaf29ce0bb5d3320824ec3d1508652421000ba466abd63bdd52c64bcce9eb1fa"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dddd5516bcc93e723d029c1633ae79c4417477b4f57dad9bfeeb6bc0315e654a"}, - {file = "orjson-3.10.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a12f2003695b10817f0fa8b8fca982ed7f5761dcb0d93cff4f2f9f6709903fd7"}, - {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:672f9874a8a8fb9bb1b771331d31ba27f57702c8106cdbadad8bda5d10bc1019"}, - {file = "orjson-3.10.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1dcbb0ca5fafb2b378b2c74419480ab2486326974826bbf6588f4dc62137570a"}, - {file = "orjson-3.10.10-cp39-none-win32.whl", hash = "sha256:d9bbd3a4b92256875cb058c3381b782649b9a3c68a4aa9a2fff020c2f9cfc1be"}, - {file = "orjson-3.10.10-cp39-none-win_amd64.whl", hash = "sha256:766f21487a53aee8524b97ca9582d5c6541b03ab6210fbaf10142ae2f3ced2aa"}, - {file = "orjson-3.10.10.tar.gz", hash = "sha256:37949383c4df7b4337ce82ee35b6d7471e55195efa7dcb45ab8226ceadb0fe3b"}, + {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, + {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, + {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, + {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, + {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, + {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, + {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, + {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, + {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, + {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, + {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, + {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, + {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, + {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, + {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, + {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, + {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, + {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, + {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, + {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, + {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, + {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, + {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, + {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, + {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, + {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, + {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, + {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, + {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, + {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, + {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, ] [[package]] name = "packaging" -version = "24.1" +version = "24.2" description = "Core utilities for Python packages" optional = false python-versions = ">=3.8" files = [ - {file = "packaging-24.1-py3-none-any.whl", hash = "sha256:5b8f2217dbdbd2f7f384c41c628544e6d52f2d0f53c6d0c3ea61aa5d1d7ff124"}, - {file = "packaging-24.1.tar.gz", hash = "sha256:026ed72c8ed3fcce5bf8950572258698927fd1dbda10a5e981cdf0ac37f4f002"}, + {file = "packaging-24.2-py3-none-any.whl", hash = "sha256:09abb1bccd265c01f4a3aa3f7a7db064b36514d2cba19a2f694fe6150451a759"}, + {file = "packaging-24.2.tar.gz", hash = "sha256:c228a6dc5e932d346bc5739379109d49e8853dd8223571c7c5b55260edc0b97f"}, ] [[package]] @@ -3674,9 +3707,9 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -4273,8 +4306,8 @@ files = [ annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, ] [package.extras] @@ -4384,13 +4417,13 @@ typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" [[package]] name = "pydantic-settings" -version = "2.6.0" +version = "2.6.1" description = "Settings management using Pydantic" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_settings-2.6.0-py3-none-any.whl", hash = "sha256:4a819166f119b74d7f8c765196b165f95cc7487ce58ea27dec8a5a26be0970e0"}, - {file = "pydantic_settings-2.6.0.tar.gz", hash = "sha256:44a1804abffac9e6a30372bb45f6cafab945ef5af25e66b1c634c01dd39e0188"}, + {file = "pydantic_settings-2.6.1-py3-none-any.whl", hash = "sha256:7fb0637c786a558d3103436278a7c4f1cfd29ba8973238a50c5bb9a55387da87"}, + {file = "pydantic_settings-2.6.1.tar.gz", hash = "sha256:e0f92546d8a9923cb8941689abf85d6601a8c19a23e97a34b2964a2e3f813ca0"}, ] [package.dependencies] @@ -4442,8 +4475,8 @@ files = [ astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.2", markers = "python_version < \"3.11\""}, ] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" @@ -5102,105 +5135,105 @@ rpds-py = ">=0.7.0" [[package]] name = "regex" -version = "2024.9.11" +version = "2024.11.6" description = "Alternative regular expression module, to replace re." optional = false python-versions = ">=3.8" files = [ - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:1494fa8725c285a81d01dc8c06b55287a1ee5e0e382d8413adc0a9197aac6408"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:0e12c481ad92d129c78f13a2a3662317e46ee7ef96c94fd332e1c29131875b7d"}, - {file = "regex-2024.9.11-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:16e13a7929791ac1216afde26f712802e3df7bf0360b32e4914dca3ab8baeea5"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:46989629904bad940bbec2106528140a218b4a36bb3042d8406980be1941429c"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a906ed5e47a0ce5f04b2c981af1c9acf9e8696066900bf03b9d7879a6f679fc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a091b0550b3b0207784a7d6d0f1a00d1d1c8a11699c1a4d93db3fbefc3ad35"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ddcd9a179c0a6fa8add279a4444015acddcd7f232a49071ae57fa6e278f1f71"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6b41e1adc61fa347662b09398e31ad446afadff932a24807d3ceb955ed865cc8"}, - {file = "regex-2024.9.11-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ced479f601cd2f8ca1fd7b23925a7e0ad512a56d6e9476f79b8f381d9d37090a"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:635a1d96665f84b292e401c3d62775851aedc31d4f8784117b3c68c4fcd4118d"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:c0256beda696edcf7d97ef16b2a33a8e5a875affd6fa6567b54f7c577b30a137"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:3ce4f1185db3fbde8ed8aa223fc9620f276c58de8b0d4f8cc86fd1360829edb6"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:09d77559e80dcc9d24570da3745ab859a9cf91953062e4ab126ba9d5993688ca"}, - {file = "regex-2024.9.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a22ccefd4db3f12b526eccb129390942fe874a3a9fdbdd24cf55773a1faab1a"}, - {file = "regex-2024.9.11-cp310-cp310-win32.whl", hash = "sha256:f745ec09bc1b0bd15cfc73df6fa4f726dcc26bb16c23a03f9e3367d357eeedd0"}, - {file = "regex-2024.9.11-cp310-cp310-win_amd64.whl", hash = "sha256:01c2acb51f8a7d6494c8c5eafe3d8e06d76563d8a8a4643b37e9b2dd8a2ff623"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:2cce2449e5927a0bf084d346da6cd5eb016b2beca10d0013ab50e3c226ffc0df"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3b37fa423beefa44919e009745ccbf353d8c981516e807995b2bd11c2c77d268"}, - {file = "regex-2024.9.11-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:64ce2799bd75039b480cc0360907c4fb2f50022f030bf9e7a8705b636e408fad"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a4cc92bb6db56ab0c1cbd17294e14f5e9224f0cc6521167ef388332604e92679"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d05ac6fa06959c4172eccd99a222e1fbf17b5670c4d596cb1e5cde99600674c4"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:040562757795eeea356394a7fb13076ad4f99d3c62ab0f8bdfb21f99a1f85664"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6113c008a7780792efc80f9dfe10ba0cd043cbf8dc9a76ef757850f51b4edc50"}, - {file = "regex-2024.9.11-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e5fb5f77c8745a60105403a774fe2c1759b71d3e7b4ca237a5e67ad066c7199"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:54d9ff35d4515debf14bc27f1e3b38bfc453eff3220f5bce159642fa762fe5d4"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:df5cbb1fbc74a8305b6065d4ade43b993be03dbe0f8b30032cced0d7740994bd"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:7fb89ee5d106e4a7a51bce305ac4efb981536301895f7bdcf93ec92ae0d91c7f"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a738b937d512b30bf75995c0159c0ddf9eec0775c9d72ac0202076c72f24aa96"}, - {file = "regex-2024.9.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e28f9faeb14b6f23ac55bfbbfd3643f5c7c18ede093977f1df249f73fd22c7b1"}, - {file = "regex-2024.9.11-cp311-cp311-win32.whl", hash = "sha256:18e707ce6c92d7282dfce370cd205098384b8ee21544e7cb29b8aab955b66fa9"}, - {file = "regex-2024.9.11-cp311-cp311-win_amd64.whl", hash = "sha256:313ea15e5ff2a8cbbad96ccef6be638393041b0a7863183c2d31e0c6116688cf"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:b0d0a6c64fcc4ef9c69bd5b3b3626cc3776520a1637d8abaa62b9edc147a58f7"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:49b0e06786ea663f933f3710a51e9385ce0cba0ea56b67107fd841a55d56a231"}, - {file = "regex-2024.9.11-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5b513b6997a0b2f10e4fd3a1313568e373926e8c252bd76c960f96fd039cd28d"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ee439691d8c23e76f9802c42a95cfeebf9d47cf4ffd06f18489122dbb0a7ad64"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a8f877c89719d759e52783f7fe6e1c67121076b87b40542966c02de5503ace42"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:23b30c62d0f16827f2ae9f2bb87619bc4fba2044911e2e6c2eb1af0161cdb766"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85ab7824093d8f10d44330fe1e6493f756f252d145323dd17ab6b48733ff6c0a"}, - {file = "regex-2024.9.11-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dee5b4810a89447151999428fe096977346cf2f29f4d5e29609d2e19e0199c9"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:98eeee2f2e63edae2181c886d7911ce502e1292794f4c5ee71e60e23e8d26b5d"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:57fdd2e0b2694ce6fc2e5ccf189789c3e2962916fb38779d3e3521ff8fe7a822"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d552c78411f60b1fdaafd117a1fca2f02e562e309223b9d44b7de8be451ec5e0"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a0b2b80321c2ed3fcf0385ec9e51a12253c50f146fddb2abbb10f033fe3d049a"}, - {file = "regex-2024.9.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:18406efb2f5a0e57e3a5881cd9354c1512d3bb4f5c45d96d110a66114d84d23a"}, - {file = "regex-2024.9.11-cp312-cp312-win32.whl", hash = "sha256:e464b467f1588e2c42d26814231edecbcfe77f5ac414d92cbf4e7b55b2c2a776"}, - {file = "regex-2024.9.11-cp312-cp312-win_amd64.whl", hash = "sha256:9e8719792ca63c6b8340380352c24dcb8cd7ec49dae36e963742a275dfae6009"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:c157bb447303070f256e084668b702073db99bbb61d44f85d811025fcf38f784"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:4db21ece84dfeefc5d8a3863f101995de646c6cb0536952c321a2650aa202c36"}, - {file = "regex-2024.9.11-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:220e92a30b426daf23bb67a7962900ed4613589bab80382be09b48896d211e92"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eb1ae19e64c14c7ec1995f40bd932448713d3c73509e82d8cd7744dc00e29e86"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f47cd43a5bfa48f86925fe26fbdd0a488ff15b62468abb5d2a1e092a4fb10e85"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9d4a76b96f398697fe01117093613166e6aa8195d63f1b4ec3f21ab637632963"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0ea51dcc0835eea2ea31d66456210a4e01a076d820e9039b04ae8d17ac11dee6"}, - {file = "regex-2024.9.11-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7aaa315101c6567a9a45d2839322c51c8d6e81f67683d529512f5bcfb99c802"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:c57d08ad67aba97af57a7263c2d9006d5c404d721c5f7542f077f109ec2a4a29"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f8404bf61298bb6f8224bb9176c1424548ee1181130818fcd2cbffddc768bed8"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:dd4490a33eb909ef5078ab20f5f000087afa2a4daa27b4c072ccb3cb3050ad84"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:eee9130eaad130649fd73e5cd92f60e55708952260ede70da64de420cdcad554"}, - {file = "regex-2024.9.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6a2644a93da36c784e546de579ec1806bfd2763ef47babc1b03d765fe560c9f8"}, - {file = "regex-2024.9.11-cp313-cp313-win32.whl", hash = "sha256:e997fd30430c57138adc06bba4c7c2968fb13d101e57dd5bb9355bf8ce3fa7e8"}, - {file = "regex-2024.9.11-cp313-cp313-win_amd64.whl", hash = "sha256:042c55879cfeb21a8adacc84ea347721d3d83a159da6acdf1116859e2427c43f"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:35f4a6f96aa6cb3f2f7247027b07b15a374f0d5b912c0001418d1d55024d5cb4"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:55b96e7ce3a69a8449a66984c268062fbaa0d8ae437b285428e12797baefce7e"}, - {file = "regex-2024.9.11-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:cb130fccd1a37ed894824b8c046321540263013da72745d755f2d35114b81a60"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:323c1f04be6b2968944d730e5c2091c8c89767903ecaa135203eec4565ed2b2b"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:be1c8ed48c4c4065ecb19d882a0ce1afe0745dfad8ce48c49586b90a55f02366"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b5b029322e6e7b94fff16cd120ab35a253236a5f99a79fb04fda7ae71ca20ae8"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f6fff13ef6b5f29221d6904aa816c34701462956aa72a77f1f151a8ec4f56aeb"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:587d4af3979376652010e400accc30404e6c16b7df574048ab1f581af82065e4"}, - {file = "regex-2024.9.11-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:079400a8269544b955ffa9e31f186f01d96829110a3bf79dc338e9910f794fca"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f9268774428ec173654985ce55fc6caf4c6d11ade0f6f914d48ef4719eb05ebb"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:23f9985c8784e544d53fc2930fc1ac1a7319f5d5332d228437acc9f418f2f168"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:ae2941333154baff9838e88aa71c1d84f4438189ecc6021a12c7573728b5838e"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:e93f1c331ca8e86fe877a48ad64e77882c0c4da0097f2212873a69bbfea95d0c"}, - {file = "regex-2024.9.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:846bc79ee753acf93aef4184c040d709940c9d001029ceb7b7a52747b80ed2dd"}, - {file = "regex-2024.9.11-cp38-cp38-win32.whl", hash = "sha256:c94bb0a9f1db10a1d16c00880bdebd5f9faf267273b8f5bd1878126e0fbde771"}, - {file = "regex-2024.9.11-cp38-cp38-win_amd64.whl", hash = "sha256:2b08fce89fbd45664d3df6ad93e554b6c16933ffa9d55cb7e01182baaf971508"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:07f45f287469039ffc2c53caf6803cd506eb5f5f637f1d4acb37a738f71dd066"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:4838e24ee015101d9f901988001038f7f0d90dc0c3b115541a1365fb439add62"}, - {file = "regex-2024.9.11-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6edd623bae6a737f10ce853ea076f56f507fd7726bee96a41ee3d68d347e4d16"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c69ada171c2d0e97a4b5aa78fbb835e0ffbb6b13fc5da968c09811346564f0d3"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02087ea0a03b4af1ed6ebab2c54d7118127fee8d71b26398e8e4b05b78963199"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:69dee6a020693d12a3cf892aba4808fe168d2a4cef368eb9bf74f5398bfd4ee8"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:297f54910247508e6e5cae669f2bc308985c60540a4edd1c77203ef19bfa63ca"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ecea58b43a67b1b79805f1a0255730edaf5191ecef84dbc4cc85eb30bc8b63b9"}, - {file = "regex-2024.9.11-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:eab4bb380f15e189d1313195b062a6aa908f5bd687a0ceccd47c8211e9cf0d4a"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0cbff728659ce4bbf4c30b2a1be040faafaa9eca6ecde40aaff86f7889f4ab39"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:54c4a097b8bc5bb0dfc83ae498061d53ad7b5762e00f4adaa23bee22b012e6ba"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:73d6d2f64f4d894c96626a75578b0bf7d9e56dcda8c3d037a2118fdfe9b1c664"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:e53b5fbab5d675aec9f0c501274c467c0f9a5d23696cfc94247e1fb56501ed89"}, - {file = "regex-2024.9.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:0ffbcf9221e04502fc35e54d1ce9567541979c3fdfb93d2c554f0ca583a19b35"}, - {file = "regex-2024.9.11-cp39-cp39-win32.whl", hash = "sha256:e4c22e1ac1f1ec1e09f72e6c44d8f2244173db7eb9629cc3a346a8d7ccc31142"}, - {file = "regex-2024.9.11-cp39-cp39-win_amd64.whl", hash = "sha256:faa3c142464efec496967359ca99696c896c591c56c53506bac1ad465f66e919"}, - {file = "regex-2024.9.11.tar.gz", hash = "sha256:6c188c307e8433bcb63dc1915022deb553b4203a70722fc542c363bf120a01fd"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ff590880083d60acc0433f9c3f713c51f7ac6ebb9adf889c79a261ecf541aa91"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:658f90550f38270639e83ce492f27d2c8d2cd63805c65a13a14d36ca126753f0"}, + {file = "regex-2024.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:164d8b7b3b4bcb2068b97428060b2a53be050085ef94eca7f240e7947f1b080e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3660c82f209655a06b587d55e723f0b813d3a7db2e32e5e7dc64ac2a9e86fde"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d22326fcdef5e08c154280b71163ced384b428343ae16a5ab2b3354aed12436e"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac758ef6aebfc8943560194e9fd0fa18bcb34d89fd8bd2af18183afd8da3a2"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:997d6a487ff00807ba810e0f8332c18b4eb8d29463cfb7c820dc4b6e7562d0cf"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:02a02d2bb04fec86ad61f3ea7f49c015a0681bf76abb9857f945d26159d2968c"}, + {file = "regex-2024.11.6-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:f02f93b92358ee3f78660e43b4b0091229260c5d5c408d17d60bf26b6c900e86"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:06eb1be98df10e81ebaded73fcd51989dcf534e3c753466e4b60c4697a003b67"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:040df6fe1a5504eb0f04f048e6d09cd7c7110fef851d7c567a6b6e09942feb7d"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fdabbfc59f2c6edba2a6622c647b716e34e8e3867e0ab975412c5c2f79b82da2"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:8447d2d39b5abe381419319f942de20b7ecd60ce86f16a23b0698f22e1b70008"}, + {file = "regex-2024.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:da8f5fc57d1933de22a9e23eec290a0d8a5927a5370d24bda9a6abe50683fe62"}, + {file = "regex-2024.11.6-cp310-cp310-win32.whl", hash = "sha256:b489578720afb782f6ccf2840920f3a32e31ba28a4b162e13900c3e6bd3f930e"}, + {file = "regex-2024.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:5071b2093e793357c9d8b2929dfc13ac5f0a6c650559503bb81189d0a3814519"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5478c6962ad548b54a591778e93cd7c456a7a29f8eca9c49e4f9a806dcc5d638"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2c89a8cc122b25ce6945f0423dc1352cb9593c68abd19223eebbd4e56612c5b7"}, + {file = "regex-2024.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:94d87b689cdd831934fa3ce16cc15cd65748e6d689f5d2b8f4f4df2065c9fa20"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1062b39a0a2b75a9c694f7a08e7183a80c63c0d62b301418ffd9c35f55aaa114"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:167ed4852351d8a750da48712c3930b031f6efdaa0f22fa1933716bfcd6bf4a3"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2d548dafee61f06ebdb584080621f3e0c23fff312f0de1afc776e2a2ba99a74f"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2a19f302cd1ce5dd01a9099aaa19cae6173306d1302a43b627f62e21cf18ac0"}, + {file = "regex-2024.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bec9931dfb61ddd8ef2ebc05646293812cb6b16b60cf7c9511a832b6f1854b55"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:9714398225f299aa85267fd222f7142fcb5c769e73d7733344efc46f2ef5cf89"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:202eb32e89f60fc147a41e55cb086db2a3f8cb82f9a9a88440dcfc5d37faae8d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:4181b814e56078e9b00427ca358ec44333765f5ca1b45597ec7446d3a1ef6e34"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:068376da5a7e4da51968ce4c122a7cd31afaaec4fccc7856c92f63876e57b51d"}, + {file = "regex-2024.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:ac10f2c4184420d881a3475fb2c6f4d95d53a8d50209a2500723d831036f7c45"}, + {file = "regex-2024.11.6-cp311-cp311-win32.whl", hash = "sha256:c36f9b6f5f8649bb251a5f3f66564438977b7ef8386a52460ae77e6070d309d9"}, + {file = "regex-2024.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:02e28184be537f0e75c1f9b2f8847dc51e08e6e171c6bde130b2687e0c33cf60"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:52fb28f528778f184f870b7cf8f225f5eef0a8f6e3778529bdd40c7b3920796a"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:fdd6028445d2460f33136c55eeb1f601ab06d74cb3347132e1c24250187500d9"}, + {file = "regex-2024.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:805e6b60c54bf766b251e94526ebad60b7de0c70f70a4e6210ee2891acb70bf2"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b85c2530be953a890eaffde05485238f07029600e8f098cdf1848d414a8b45e4"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bb26437975da7dc36b7efad18aa9dd4ea569d2357ae6b783bf1118dabd9ea577"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:abfa5080c374a76a251ba60683242bc17eeb2c9818d0d30117b4486be10c59d3"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:70b7fa6606c2881c1db9479b0eaa11ed5dfa11c8d60a474ff0e095099f39d98e"}, + {file = "regex-2024.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0c32f75920cf99fe6b6c539c399a4a128452eaf1af27f39bce8909c9a3fd8cbe"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:982e6d21414e78e1f51cf595d7f321dcd14de1f2881c5dc6a6e23bbbbd68435e"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:a7c2155f790e2fb448faed6dd241386719802296ec588a8b9051c1f5c481bc29"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:149f5008d286636e48cd0b1dd65018548944e495b0265b45e1bffecce1ef7f39"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:e5364a4502efca094731680e80009632ad6624084aff9a23ce8c8c6820de3e51"}, + {file = "regex-2024.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:0a86e7eeca091c09e021db8eb72d54751e527fa47b8d5787caf96d9831bd02ad"}, + {file = "regex-2024.11.6-cp312-cp312-win32.whl", hash = "sha256:32f9a4c643baad4efa81d549c2aadefaeba12249b2adc5af541759237eee1c54"}, + {file = "regex-2024.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:a93c194e2df18f7d264092dc8539b8ffb86b45b899ab976aa15d48214138e81b"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a6ba92c0bcdf96cbf43a12c717eae4bc98325ca3730f6b130ffa2e3c3c723d84"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:525eab0b789891ac3be914d36893bdf972d483fe66551f79d3e27146191a37d4"}, + {file = "regex-2024.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:086a27a0b4ca227941700e0b31425e7a28ef1ae8e5e05a33826e17e47fbfdba0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bde01f35767c4a7899b7eb6e823b125a64de314a8ee9791367c9a34d56af18d0"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b583904576650166b3d920d2bcce13971f6f9e9a396c673187f49811b2769dc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c4de13f06a0d54fa0d5ab1b7138bfa0d883220965a29616e3ea61b35d5f5fc7"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3cde6e9f2580eb1665965ce9bf17ff4952f34f5b126beb509fee8f4e994f143c"}, + {file = "regex-2024.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d7f453dca13f40a02b79636a339c5b62b670141e63efd511d3f8f73fba162b3"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:59dfe1ed21aea057a65c6b586afd2a945de04fc7db3de0a6e3ed5397ad491b07"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b97c1e0bd37c5cd7902e65f410779d39eeda155800b65fc4d04cc432efa9bc6e"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:f9d1e379028e0fc2ae3654bac3cbbef81bf3fd571272a42d56c24007979bafb6"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:13291b39131e2d002a7940fb176e120bec5145f3aeb7621be6534e46251912c4"}, + {file = "regex-2024.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:4f51f88c126370dcec4908576c5a627220da6c09d0bff31cfa89f2523843316d"}, + {file = "regex-2024.11.6-cp313-cp313-win32.whl", hash = "sha256:63b13cfd72e9601125027202cad74995ab26921d8cd935c25f09c630436348ff"}, + {file = "regex-2024.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:2b3361af3198667e99927da8b84c1b010752fa4b1115ee30beaa332cabc3ef1a"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:3a51ccc315653ba012774efca4f23d1d2a8a8f278a6072e29c7147eee7da446b"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ad182d02e40de7459b73155deb8996bbd8e96852267879396fb274e8700190e3"}, + {file = "regex-2024.11.6-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:ba9b72e5643641b7d41fa1f6d5abda2c9a263ae835b917348fc3c928182ad467"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:40291b1b89ca6ad8d3f2b82782cc33807f1406cf68c8d440861da6304d8ffbbd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cdf58d0e516ee426a48f7b2c03a332a4114420716d55769ff7108c37a09951bf"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a36fdf2af13c2b14738f6e973aba563623cb77d753bbbd8d414d18bfaa3105dd"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d1cee317bfc014c2419a76bcc87f071405e3966da434e03e13beb45f8aced1a6"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:50153825ee016b91549962f970d6a4442fa106832e14c918acd1c8e479916c4f"}, + {file = "regex-2024.11.6-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:ea1bfda2f7162605f6e8178223576856b3d791109f15ea99a9f95c16a7636fb5"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:df951c5f4a1b1910f1a99ff42c473ff60f8225baa1cdd3539fe2819d9543e9df"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:072623554418a9911446278f16ecb398fb3b540147a7828c06e2011fa531e773"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:f654882311409afb1d780b940234208a252322c24a93b442ca714d119e68086c"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:89d75e7293d2b3e674db7d4d9b1bee7f8f3d1609428e293771d1a962617150cc"}, + {file = "regex-2024.11.6-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:f65557897fc977a44ab205ea871b690adaef6b9da6afda4790a2484b04293a5f"}, + {file = "regex-2024.11.6-cp38-cp38-win32.whl", hash = "sha256:6f44ec28b1f858c98d3036ad5d7d0bfc568bdd7a74f9c24e25f41ef1ebfd81a4"}, + {file = "regex-2024.11.6-cp38-cp38-win_amd64.whl", hash = "sha256:bb8f74f2f10dbf13a0be8de623ba4f9491faf58c24064f32b65679b021ed0001"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:5704e174f8ccab2026bd2f1ab6c510345ae8eac818b613d7d73e785f1310f839"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:220902c3c5cc6af55d4fe19ead504de80eb91f786dc102fbd74894b1551f095e"}, + {file = "regex-2024.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5e7e351589da0850c125f1600a4c4ba3c722efefe16b297de54300f08d734fbf"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5056b185ca113c88e18223183aa1a50e66507769c9640a6ff75859619d73957b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2e34b51b650b23ed3354b5a07aab37034d9f923db2a40519139af34f485f77d0"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5670bce7b200273eee1840ef307bfa07cda90b38ae56e9a6ebcc9f50da9c469b"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:08986dce1339bc932923e7d1232ce9881499a0e02925f7402fb7c982515419ef"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:93c0b12d3d3bc25af4ebbf38f9ee780a487e8bf6954c115b9f015822d3bb8e48"}, + {file = "regex-2024.11.6-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:764e71f22ab3b305e7f4c21f1a97e1526a25ebdd22513e251cf376760213da13"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:f056bf21105c2515c32372bbc057f43eb02aae2fda61052e2f7622c801f0b4e2"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:69ab78f848845569401469da20df3e081e6b5a11cb086de3eed1d48f5ed57c95"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:86fddba590aad9208e2fa8b43b4c098bb0ec74f15718bb6a704e3c63e2cef3e9"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:684d7a212682996d21ca12ef3c17353c021fe9de6049e19ac8481ec35574a70f"}, + {file = "regex-2024.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a03e02f48cd1abbd9f3b7e3586d97c8f7a9721c436f51a5245b3b9483044480b"}, + {file = "regex-2024.11.6-cp39-cp39-win32.whl", hash = "sha256:41758407fc32d5c3c5de163888068cfee69cb4c2be844e7ac517a52770f9af57"}, + {file = "regex-2024.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:b2837718570f95dd41675328e111345f9b7095d821bac435aac173ac80b19983"}, + {file = "regex-2024.11.6.tar.gz", hash = "sha256:7ab159b063c52a0333c884e4679f8d7a85112ee3078fe3d9004b2dd875585519"}, ] [[package]] @@ -5254,13 +5287,13 @@ idna2008 = ["idna"] [[package]] name = "rich" -version = "13.9.3" +version = "13.9.4" description = "Render rich text, tables, progress bars, syntax highlighting, markdown and more to the terminal" optional = false python-versions = ">=3.8.0" files = [ - {file = "rich-13.9.3-py3-none-any.whl", hash = "sha256:9836f5096eb2172c9e77df411c1b009bace4193d6a481d534fea75ebba758283"}, - {file = "rich-13.9.3.tar.gz", hash = "sha256:bc1e01b899537598cf02579d2b9f4a415104d3fc439313a7a2c165d76557a08e"}, + {file = "rich-13.9.4-py3-none-any.whl", hash = "sha256:6049d5e6ec054bf2779ab3358186963bac2ea89175919d699e378b99738c2a90"}, + {file = "rich-13.9.4.tar.gz", hash = "sha256:439594978a49a09530cff7ebc4b5c7103ef57baf48d5ea3184f21d9a2befa098"}, ] [package.dependencies] @@ -5273,114 +5306,101 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.20.0" +version = "0.21.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "rpds_py-0.20.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:3ad0fda1635f8439cde85c700f964b23ed5fc2d28016b32b9ee5fe30da5c84e2"}, - {file = "rpds_py-0.20.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9bb4a0d90fdb03437c109a17eade42dfbf6190408f29b2744114d11586611d6f"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c6377e647bbfd0a0b159fe557f2c6c602c159fc752fa316572f012fc0bf67150"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eb851b7df9dda52dc1415ebee12362047ce771fc36914586b2e9fcbd7d293b3e"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e0f80b739e5a8f54837be5d5c924483996b603d5502bfff79bf33da06164ee2"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a8c94dad2e45324fc74dce25e1645d4d14df9a4e54a30fa0ae8bad9a63928e3"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8e604fe73ba048c06085beaf51147eaec7df856824bfe7b98657cf436623daf"}, - {file = "rpds_py-0.20.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:df3de6b7726b52966edf29663e57306b23ef775faf0ac01a3e9f4012a24a4140"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:cf258ede5bc22a45c8e726b29835b9303c285ab46fc7c3a4cc770736b5304c9f"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:55fea87029cded5df854ca7e192ec7bdb7ecd1d9a3f63d5c4eb09148acf4a7ce"}, - {file = "rpds_py-0.20.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:ae94bd0b2f02c28e199e9bc51485d0c5601f58780636185660f86bf80c89af94"}, - {file = "rpds_py-0.20.0-cp310-none-win32.whl", hash = "sha256:28527c685f237c05445efec62426d285e47a58fb05ba0090a4340b73ecda6dee"}, - {file = "rpds_py-0.20.0-cp310-none-win_amd64.whl", hash = "sha256:238a2d5b1cad28cdc6ed15faf93a998336eb041c4e440dd7f902528b8891b399"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac2f4f7a98934c2ed6505aead07b979e6f999389f16b714448fb39bbaa86a489"}, - {file = "rpds_py-0.20.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:220002c1b846db9afd83371d08d239fdc865e8f8c5795bbaec20916a76db3318"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d7919548df3f25374a1f5d01fbcd38dacab338ef5f33e044744b5c36729c8db"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:758406267907b3781beee0f0edfe4a179fbd97c0be2e9b1154d7f0a1279cf8e5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3d61339e9f84a3f0767b1995adfb171a0d00a1185192718a17af6e124728e0f5"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1259c7b3705ac0a0bd38197565a5d603218591d3f6cee6e614e380b6ba61c6f6"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5c1dc0f53856b9cc9a0ccca0a7cc61d3d20a7088201c0937f3f4048c1718a209"}, - {file = "rpds_py-0.20.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7e60cb630f674a31f0368ed32b2a6b4331b8350d67de53c0359992444b116dd3"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:dbe982f38565bb50cb7fb061ebf762c2f254ca3d8c20d4006878766e84266272"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:514b3293b64187172bc77c8fb0cdae26981618021053b30d8371c3a902d4d5ad"}, - {file = "rpds_py-0.20.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:d0a26ffe9d4dd35e4dfdd1e71f46401cff0181c75ac174711ccff0459135fa58"}, - {file = "rpds_py-0.20.0-cp311-none-win32.whl", hash = "sha256:89c19a494bf3ad08c1da49445cc5d13d8fefc265f48ee7e7556839acdacf69d0"}, - {file = "rpds_py-0.20.0-cp311-none-win_amd64.whl", hash = "sha256:c638144ce971df84650d3ed0096e2ae7af8e62ecbbb7b201c8935c370df00a2c"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:a84ab91cbe7aab97f7446652d0ed37d35b68a465aeef8fc41932a9d7eee2c1a6"}, - {file = "rpds_py-0.20.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:56e27147a5a4c2c21633ff8475d185734c0e4befd1c989b5b95a5d0db699b21b"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2580b0c34583b85efec8c5c5ec9edf2dfe817330cc882ee972ae650e7b5ef739"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b80d4a7900cf6b66bb9cee5c352b2d708e29e5a37fe9bf784fa97fc11504bf6c"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:50eccbf054e62a7b2209b28dc7a22d6254860209d6753e6b78cfaeb0075d7bee"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:49a8063ea4296b3a7e81a5dfb8f7b2d73f0b1c20c2af401fb0cdf22e14711a96"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea438162a9fcbee3ecf36c23e6c68237479f89f962f82dae83dc15feeceb37e4"}, - {file = "rpds_py-0.20.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:18d7585c463087bddcfa74c2ba267339f14f2515158ac4db30b1f9cbdb62c8ef"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d4c7d1a051eeb39f5c9547e82ea27cbcc28338482242e3e0b7768033cb083821"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:e4df1e3b3bec320790f699890d41c59d250f6beda159ea3c44c3f5bac1976940"}, - {file = "rpds_py-0.20.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:2cf126d33a91ee6eedc7f3197b53e87a2acdac63602c0f03a02dd69e4b138174"}, - {file = "rpds_py-0.20.0-cp312-none-win32.whl", hash = "sha256:8bc7690f7caee50b04a79bf017a8d020c1f48c2a1077ffe172abec59870f1139"}, - {file = "rpds_py-0.20.0-cp312-none-win_amd64.whl", hash = "sha256:0e13e6952ef264c40587d510ad676a988df19adea20444c2b295e536457bc585"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa9a0521aeca7d4941499a73ad7d4f8ffa3d1affc50b9ea11d992cd7eff18a29"}, - {file = "rpds_py-0.20.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4a1f1d51eccb7e6c32ae89243cb352389228ea62f89cd80823ea7dd1b98e0b91"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a86a9b96070674fc88b6f9f71a97d2c1d3e5165574615d1f9168ecba4cecb24"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6c8ef2ebf76df43f5750b46851ed1cdf8f109d7787ca40035fe19fbdc1acc5a7"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b74b25f024b421d5859d156750ea9a65651793d51b76a2e9238c05c9d5f203a9"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57eb94a8c16ab08fef6404301c38318e2c5a32216bf5de453e2714c964c125c8"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1940dae14e715e2e02dfd5b0f64a52e8374a517a1e531ad9412319dc3ac7879"}, - {file = "rpds_py-0.20.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d20277fd62e1b992a50c43f13fbe13277a31f8c9f70d59759c88f644d66c619f"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:06db23d43f26478303e954c34c75182356ca9aa7797d22c5345b16871ab9c45c"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:b2a5db5397d82fa847e4c624b0c98fe59d2d9b7cf0ce6de09e4d2e80f8f5b3f2"}, - {file = "rpds_py-0.20.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5a35df9f5548fd79cb2f52d27182108c3e6641a4feb0f39067911bf2adaa3e57"}, - {file = "rpds_py-0.20.0-cp313-none-win32.whl", hash = "sha256:fd2d84f40633bc475ef2d5490b9c19543fbf18596dcb1b291e3a12ea5d722f7a"}, - {file = "rpds_py-0.20.0-cp313-none-win_amd64.whl", hash = "sha256:9bc2d153989e3216b0559251b0c260cfd168ec78b1fac33dd485750a228db5a2"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:f2fbf7db2012d4876fb0d66b5b9ba6591197b0f165db8d99371d976546472a24"}, - {file = "rpds_py-0.20.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1e5f3cd7397c8f86c8cc72d5a791071431c108edd79872cdd96e00abd8497d29"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ce9845054c13696f7af7f2b353e6b4f676dab1b4b215d7fe5e05c6f8bb06f965"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c3e130fd0ec56cb76eb49ef52faead8ff09d13f4527e9b0c400307ff72b408e1"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4b16aa0107ecb512b568244ef461f27697164d9a68d8b35090e9b0c1c8b27752"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aa7f429242aae2947246587d2964fad750b79e8c233a2367f71b554e9447949c"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af0fc424a5842a11e28956e69395fbbeab2c97c42253169d87e90aac2886d751"}, - {file = "rpds_py-0.20.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b8c00a3b1e70c1d3891f0db1b05292747f0dbcfb49c43f9244d04c70fbc40eb8"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:40ce74fc86ee4645d0a225498d091d8bc61f39b709ebef8204cb8b5a464d3c0e"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:4fe84294c7019456e56d93e8ababdad5a329cd25975be749c3f5f558abb48253"}, - {file = "rpds_py-0.20.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:338ca4539aad4ce70a656e5187a3a31c5204f261aef9f6ab50e50bcdffaf050a"}, - {file = "rpds_py-0.20.0-cp38-none-win32.whl", hash = "sha256:54b43a2b07db18314669092bb2de584524d1ef414588780261e31e85846c26a5"}, - {file = "rpds_py-0.20.0-cp38-none-win_amd64.whl", hash = "sha256:a1862d2d7ce1674cffa6d186d53ca95c6e17ed2b06b3f4c476173565c862d232"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:3fde368e9140312b6e8b6c09fb9f8c8c2f00999d1823403ae90cc00480221b22"}, - {file = "rpds_py-0.20.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:9824fb430c9cf9af743cf7aaf6707bf14323fb51ee74425c380f4c846ea70789"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11ef6ce74616342888b69878d45e9f779b95d4bd48b382a229fe624a409b72c5"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c52d3f2f82b763a24ef52f5d24358553e8403ce05f893b5347098014f2d9eff2"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d35cef91e59ebbeaa45214861874bc6f19eb35de96db73e467a8358d701a96c"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d72278a30111e5b5525c1dd96120d9e958464316f55adb030433ea905866f4de"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c29cbbba378759ac5786730d1c3cb4ec6f8ababf5c42a9ce303dc4b3d08cda"}, - {file = "rpds_py-0.20.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6632f2d04f15d1bd6fe0eedd3b86d9061b836ddca4c03d5cf5c7e9e6b7c14580"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d0b67d87bb45ed1cd020e8fbf2307d449b68abc45402fe1a4ac9e46c3c8b192b"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec31a99ca63bf3cd7f1a5ac9fe95c5e2d060d3c768a09bc1d16e235840861420"}, - {file = "rpds_py-0.20.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22e6c9976e38f4d8c4a63bd8a8edac5307dffd3ee7e6026d97f3cc3a2dc02a0b"}, - {file = "rpds_py-0.20.0-cp39-none-win32.whl", hash = "sha256:569b3ea770c2717b730b61998b6c54996adee3cef69fc28d444f3e7920313cf7"}, - {file = "rpds_py-0.20.0-cp39-none-win_amd64.whl", hash = "sha256:e6900ecdd50ce0facf703f7a00df12374b74bbc8ad9fe0f6559947fb20f82364"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:617c7357272c67696fd052811e352ac54ed1d9b49ab370261a80d3b6ce385045"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9426133526f69fcaba6e42146b4e12d6bc6c839b8b555097020e2b78ce908dcc"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:deb62214c42a261cb3eb04d474f7155279c1a8a8c30ac89b7dcb1721d92c3c02"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fcaeb7b57f1a1e071ebd748984359fef83ecb026325b9d4ca847c95bc7311c92"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d454b8749b4bd70dd0a79f428731ee263fa6995f83ccb8bada706e8d1d3ff89d"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d807dc2051abe041b6649681dce568f8e10668e3c1c6543ebae58f2d7e617855"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3c20f0ddeb6e29126d45f89206b8291352b8c5b44384e78a6499d68b52ae511"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b7f19250ceef892adf27f0399b9e5afad019288e9be756d6919cb58892129f51"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:4f1ed4749a08379555cebf4650453f14452eaa9c43d0a95c49db50c18b7da075"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:dcedf0b42bcb4cfff4101d7771a10532415a6106062f005ab97d1d0ab5681c60"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:39ed0d010457a78f54090fafb5d108501b5aa5604cc22408fc1c0c77eac14344"}, - {file = "rpds_py-0.20.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:bb273176be34a746bdac0b0d7e4e2c467323d13640b736c4c477881a3220a989"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f918a1a130a6dfe1d7fe0f105064141342e7dd1611f2e6a21cd2f5c8cb1cfb3e"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f60012a73aa396be721558caa3a6fd49b3dd0033d1675c6d59c4502e870fcf0c"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d2b1ad682a3dfda2a4e8ad8572f3100f95fad98cb99faf37ff0ddfe9cbf9d03"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:614fdafe9f5f19c63ea02817fa4861c606a59a604a77c8cdef5aa01d28b97921"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fa518bcd7600c584bf42e6617ee8132869e877db2f76bcdc281ec6a4113a53ab"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0475242f447cc6cb8a9dd486d68b2ef7fbee84427124c232bff5f63b1fe11e5"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f90a4cd061914a60bd51c68bcb4357086991bd0bb93d8aa66a6da7701370708f"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:def7400461c3a3f26e49078302e1c1b38f6752342c77e3cf72ce91ca69fb1bc1"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:65794e4048ee837494aea3c21a28ad5fc080994dfba5b036cf84de37f7ad5074"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:faefcc78f53a88f3076b7f8be0a8f8d35133a3ecf7f3770895c25f8813460f08"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:5b4f105deeffa28bbcdff6c49b34e74903139afa690e35d2d9e3c2c2fba18cec"}, - {file = "rpds_py-0.20.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:fdfc3a892927458d98f3d55428ae46b921d1f7543b89382fdb483f5640daaec8"}, - {file = "rpds_py-0.20.0.tar.gz", hash = "sha256:d72a210824facfdaf8768cf2d7ca25a042c30320b3020de2fa04640920d4e121"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, + {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, + {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, + {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, + {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, + {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, + {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, + {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, + {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, + {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, + {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, + {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, + {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, + {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, + {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, + {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, + {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, + {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, + {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, + {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, + {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, + {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, + {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, + {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, + {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, + {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, + {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, + {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, + {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, ] [[package]] @@ -5705,13 +5725,13 @@ files = [ [[package]] name = "sentence-transformers" -version = "3.2.1" +version = "3.3.1" description = "State-of-the-Art Text Embeddings" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "sentence_transformers-3.2.1-py3-none-any.whl", hash = "sha256:c507e069eea33d15f1f2c72f74d7ea93abef298152cc235ab5af5e3a7584f738"}, - {file = "sentence_transformers-3.2.1.tar.gz", hash = "sha256:9fc38e620e5e1beba31d538a451778c9ccdbad77119d90f59f5bce49c4148e79"}, + {file = "sentence_transformers-3.3.1-py3-none-any.whl", hash = "sha256:abffcc79dab37b7d18d21a26d5914223dd42239cfe18cb5e111c66c54b658ae7"}, + {file = "sentence_transformers-3.3.1.tar.gz", hash = "sha256:9635dbfb11c6b01d036b9cfcee29f7716ab64cf2407ad9f403a2e607da2ac48b"}, ] [package.dependencies] @@ -5724,7 +5744,7 @@ tqdm = "*" transformers = ">=4.41.0,<5.0.0" [package.extras] -dev = ["accelerate (>=0.20.3)", "datasets", "pre-commit", "pytest", "pytest-cov"] +dev = ["accelerate (>=0.20.3)", "datasets", "peft", "pre-commit", "pytest", "pytest-cov"] onnx = ["optimum[onnxruntime] (>=1.23.1)"] onnx-gpu = ["optimum[onnxruntime-gpu] (>=1.23.1)"] openvino = ["optimum-intel[openvino] (>=1.20.0)"] @@ -5732,23 +5752,23 @@ train = ["accelerate (>=0.20.3)", "datasets"] [[package]] name = "setuptools" -version = "75.3.0" +version = "75.5.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "setuptools-75.3.0-py3-none-any.whl", hash = "sha256:f2504966861356aa38616760c0f66568e535562374995367b4e69c7143cf6bcd"}, - {file = "setuptools-75.3.0.tar.gz", hash = "sha256:fba5dd4d766e97be1b1681d98712680ae8f2f26d7881245f2ce9e40714f1a686"}, + {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, + {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, ] [package.extras] -check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.5.2)"] -core = ["importlib-metadata (>=6)", "importlib-resources (>=5.10.2)", "jaraco.collections", "jaraco.functools", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] +core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] -test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=23.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (==1.12.*)", "pytest-mypy"] +test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] +type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shapely" @@ -6044,111 +6064,123 @@ files = [ [[package]] name = "tokenizers" -version = "0.20.1" +version = "0.20.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:439261da7c0a5c88bda97acb284d49fbdaf67e9d3b623c0bfd107512d22787a9"}, - {file = "tokenizers-0.20.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:03dae629d99068b1ea5416d50de0fea13008f04129cc79af77a2a6392792d93c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b61f561f329ffe4b28367798b89d60c4abf3f815d37413b6352bc6412a359867"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ec870fce1ee5248a10be69f7a8408a234d6f2109f8ea827b4f7ecdbf08c9fd15"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d388d1ea8b7447da784e32e3b86a75cce55887e3b22b31c19d0b186b1c677800"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:299c85c1d21135bc01542237979bf25c32efa0d66595dd0069ae259b97fb2dbe"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e96f6c14c9752bb82145636b614d5a78e9cde95edfbe0a85dad0dd5ddd6ec95c"}, - {file = "tokenizers-0.20.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fc9e95ad49c932b80abfbfeaf63b155761e695ad9f8a58c52a47d962d76e310f"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:f22dee205329a636148c325921c73cf3e412e87d31f4d9c3153b302a0200057b"}, - {file = "tokenizers-0.20.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a2ffd9a8895575ac636d44500c66dffaef133823b6b25067604fa73bbc5ec09d"}, - {file = "tokenizers-0.20.1-cp310-none-win32.whl", hash = "sha256:2847843c53f445e0f19ea842a4e48b89dd0db4e62ba6e1e47a2749d6ec11f50d"}, - {file = "tokenizers-0.20.1-cp310-none-win_amd64.whl", hash = "sha256:f9aa93eacd865f2798b9e62f7ce4533cfff4f5fbd50c02926a78e81c74e432cd"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:4a717dcb08f2dabbf27ae4b6b20cbbb2ad7ed78ce05a829fae100ff4b3c7ff15"}, - {file = "tokenizers-0.20.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3f84dad1ff1863c648d80628b1b55353d16303431283e4efbb6ab1af56a75832"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:929c8f3afa16a5130a81ab5079c589226273ec618949cce79b46d96e59a84f61"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d10766473954397e2d370f215ebed1cc46dcf6fd3906a2a116aa1d6219bfedc3"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9300fac73ddc7e4b0330acbdda4efaabf74929a4a61e119a32a181f534a11b47"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0ecaf7b0e39caeb1aa6dd6e0975c405716c82c1312b55ac4f716ef563a906969"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5170be9ec942f3d1d317817ced8d749b3e1202670865e4fd465e35d8c259de83"}, - {file = "tokenizers-0.20.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef3f1ae08fa9aea5891cbd69df29913e11d3841798e0bfb1ff78b78e4e7ea0a4"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:ee86d4095d3542d73579e953c2e5e07d9321af2ffea6ecc097d16d538a2dea16"}, - {file = "tokenizers-0.20.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:86dcd08da163912e17b27bbaba5efdc71b4fbffb841530fdb74c5707f3c49216"}, - {file = "tokenizers-0.20.1-cp311-none-win32.whl", hash = "sha256:9af2dc4ee97d037bc6b05fa4429ddc87532c706316c5e11ce2f0596dfcfa77af"}, - {file = "tokenizers-0.20.1-cp311-none-win_amd64.whl", hash = "sha256:899152a78b095559c287b4c6d0099469573bb2055347bb8154db106651296f39"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:407ab666b38e02228fa785e81f7cf79ef929f104bcccf68a64525a54a93ceac9"}, - {file = "tokenizers-0.20.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2f13a2d16032ebc8bd812eb8099b035ac65887d8f0c207261472803b9633cf3e"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e98eee4dca22849fbb56a80acaa899eec5b72055d79637dd6aa15d5e4b8628c9"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:47c1bcdd61e61136087459cb9e0b069ff23b5568b008265e5cbc927eae3387ce"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:128c1110e950534426e2274837fc06b118ab5f2fa61c3436e60e0aada0ccfd67"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e2e2d47a819d2954f2c1cd0ad51bb58ffac6f53a872d5d82d65d79bf76b9896d"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bdd67a0e3503a9a7cf8bc5a4a49cdde5fa5bada09a51e4c7e1c73900297539bd"}, - {file = "tokenizers-0.20.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:689b93d2e26d04da337ac407acec8b5d081d8d135e3e5066a88edd5bdb5aff89"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:0c6a796ddcd9a19ad13cf146997cd5895a421fe6aec8fd970d69f9117bddb45c"}, - {file = "tokenizers-0.20.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3ea919687aa7001a8ff1ba36ac64f165c4e89035f57998fa6cedcfd877be619d"}, - {file = "tokenizers-0.20.1-cp312-none-win32.whl", hash = "sha256:6d3ac5c1f48358ffe20086bf065e843c0d0a9fce0d7f0f45d5f2f9fba3609ca5"}, - {file = "tokenizers-0.20.1-cp312-none-win_amd64.whl", hash = "sha256:b0874481aea54a178f2bccc45aa2d0c99cd3f79143a0948af6a9a21dcc49173b"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:96af92e833bd44760fb17f23f402e07a66339c1dcbe17d79a9b55bb0cc4f038e"}, - {file = "tokenizers-0.20.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:65f34e5b731a262dfa562820818533c38ce32a45864437f3d9c82f26c139ca7f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:17f98fccb5c12ab1ce1f471731a9cd86df5d4bd2cf2880c5a66b229802d96145"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b8c0fc3542cf9370bf92c932eb71bdeb33d2d4aeeb4126d9fd567b60bd04cb30"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b39356df4575d37f9b187bb623aab5abb7b62c8cb702867a1768002f814800c"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bfdad27b0e50544f6b838895a373db6114b85112ba5c0cefadffa78d6daae563"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:094663dd0e85ee2e573126918747bdb40044a848fde388efb5b09d57bc74c680"}, - {file = "tokenizers-0.20.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:14e4cf033a2aa207d7ac790e91adca598b679999710a632c4a494aab0fc3a1b2"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:9310951c92c9fb91660de0c19a923c432f110dbfad1a2d429fbc44fa956bf64f"}, - {file = "tokenizers-0.20.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:05e41e302c315bd2ed86c02e917bf03a6cf7d2f652c9cee1a0eb0d0f1ca0d32c"}, - {file = "tokenizers-0.20.1-cp37-none-win32.whl", hash = "sha256:212231ab7dfcdc879baf4892ca87c726259fa7c887e1688e3f3cead384d8c305"}, - {file = "tokenizers-0.20.1-cp37-none-win_amd64.whl", hash = "sha256:896195eb9dfdc85c8c052e29947169c1fcbe75a254c4b5792cdbd451587bce85"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:741fb22788482d09d68e73ece1495cfc6d9b29a06c37b3df90564a9cfa688e6d"}, - {file = "tokenizers-0.20.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10be14ebd8082086a342d969e17fc2d6edc856c59dbdbddd25f158fa40eaf043"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:514cf279b22fa1ae0bc08e143458c74ad3b56cd078b319464959685a35c53d5e"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a647c5b7cb896d6430cf3e01b4e9a2d77f719c84cefcef825d404830c2071da2"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7cdf379219e1e1dd432091058dab325a2e6235ebb23e0aec8d0508567c90cd01"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ba72260449e16c4c2f6f3252823b059fbf2d31b32617e582003f2b18b415c39"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:910b96ed87316e4277b23c7bcaf667ce849c7cc379a453fa179e7e09290eeb25"}, - {file = "tokenizers-0.20.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e53975a6694428a0586534cc1354b2408d4e010a3103117f617cbb550299797c"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:07c4b7be58da142b0730cc4e5fd66bb7bf6f57f4986ddda73833cd39efef8a01"}, - {file = "tokenizers-0.20.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b605c540753e62199bf15cf69c333e934077ef2350262af2ccada46026f83d1c"}, - {file = "tokenizers-0.20.1-cp38-none-win32.whl", hash = "sha256:88b3bc76ab4db1ab95ead623d49c95205411e26302cf9f74203e762ac7e85685"}, - {file = "tokenizers-0.20.1-cp38-none-win_amd64.whl", hash = "sha256:d412a74cf5b3f68a90c615611a5aa4478bb303d1c65961d22db45001df68afcb"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a25dcb2f41a0a6aac31999e6c96a75e9152fa0127af8ece46c2f784f23b8197a"}, - {file = "tokenizers-0.20.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a12c3cebb8c92e9c35a23ab10d3852aee522f385c28d0b4fe48c0b7527d59762"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:02e18da58cf115b7c40de973609c35bde95856012ba42a41ee919c77935af251"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f326a1ac51ae909b9760e34671c26cd0dfe15662f447302a9d5bb2d872bab8ab"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0b4872647ea6f25224e2833b044b0b19084e39400e8ead3cfe751238b0802140"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ce6238a3311bb8e4c15b12600927d35c267b92a52c881ef5717a900ca14793f7"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:57b7a8880b208866508b06ce365dc631e7a2472a3faa24daa430d046fb56c885"}, - {file = "tokenizers-0.20.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a908c69c2897a68f412aa05ba38bfa87a02980df70f5a72fa8490479308b1f2d"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:da1001aa46f4490099c82e2facc4fbc06a6a32bf7de3918ba798010954b775e0"}, - {file = "tokenizers-0.20.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:42c097390e2f0ed0a5c5d569e6669dd4e9fff7b31c6a5ce6e9c66a61687197de"}, - {file = "tokenizers-0.20.1-cp39-none-win32.whl", hash = "sha256:3d4d218573a3d8b121a1f8c801029d70444ffb6d8f129d4cca1c7b672ee4a24c"}, - {file = "tokenizers-0.20.1-cp39-none-win_amd64.whl", hash = "sha256:37d1e6f616c84fceefa7c6484a01df05caf1e207669121c66213cb5b2911d653"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:48689da7a395df41114f516208d6550e3e905e1239cc5ad386686d9358e9cef0"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:712f90ea33f9bd2586b4a90d697c26d56d0a22fd3c91104c5858c4b5b6489a79"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:359eceb6a620c965988fc559cebc0a98db26713758ec4df43fb76d41486a8ed5"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0d3caf244ce89d24c87545aafc3448be15870096e796c703a0d68547187192e1"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03b03cf8b9a32254b1bf8a305fb95c6daf1baae0c1f93b27f2b08c9759f41dee"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:218e5a3561561ea0f0ef1559c6d95b825308dbec23fb55b70b92589e7ff2e1e8"}, - {file = "tokenizers-0.20.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f40df5e0294a95131cc5f0e0eb91fe86d88837abfbee46b9b3610b09860195a7"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:08aaa0d72bb65058e8c4b0455f61b840b156c557e2aca57627056624c3a93976"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:998700177b45f70afeb206ad22c08d9e5f3a80639dae1032bf41e8cbc4dada4b"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:62f7fbd3c2c38b179556d879edae442b45f68312019c3a6013e56c3947a4e648"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:31e87fca4f6bbf5cc67481b562147fe932f73d5602734de7dd18a8f2eee9c6dd"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:956f21d359ae29dd51ca5726d2c9a44ffafa041c623f5aa33749da87cfa809b9"}, - {file = "tokenizers-0.20.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:1fbbaf17a393c78d8aedb6a334097c91cb4119a9ced4764ab8cfdc8d254dc9f9"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:ebe63e31f9c1a970c53866d814e35ec2ec26fda03097c486f82f3891cee60830"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:81970b80b8ac126910295f8aab2d7ef962009ea39e0d86d304769493f69aaa1e"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:130e35e76f9337ed6c31be386e75d4925ea807055acf18ca1a9b0eec03d8fe23"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:cd28a8614f5c82a54ab2463554e84ad79526c5184cf4573bbac2efbbbcead457"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9041ee665d0fa7f5c4ccf0f81f5e6b7087f797f85b143c094126fc2611fec9d0"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:62eb9daea2a2c06bcd8113a5824af8ef8ee7405d3a71123ba4d52c79bb3d9f1a"}, - {file = "tokenizers-0.20.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f861889707b54a9ab1204030b65fd6c22bdd4a95205deec7994dc22a8baa2ea4"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:89d5c337d74ea6e5e7dc8af124cf177be843bbb9ca6e58c01f75ea103c12c8a9"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:0b7f515c83397e73292accdbbbedc62264e070bae9682f06061e2ddce67cacaf"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3e0305fc1ec6b1e5052d30d9c1d5c807081a7bd0cae46a33d03117082e91908c"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5dc611e6ac0fa00a41de19c3bf6391a05ea201d2d22b757d63f5491ec0e67faa"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c5ffe0d7f7bfcfa3b2585776ecf11da2e01c317027c8573c78ebcb8985279e23"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e7edb8ec12c100d5458d15b1e47c0eb30ad606a05641f19af7563bc3d1608c14"}, - {file = "tokenizers-0.20.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:de291633fb9303555793cc544d4a86e858da529b7d0b752bcaf721ae1d74b2c9"}, - {file = "tokenizers-0.20.1.tar.gz", hash = "sha256:84edcc7cdeeee45ceedb65d518fffb77aec69311c9c8e30f77ad84da3025f002"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, + {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, + {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, + {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, + {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, + {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, + {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, + {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, + {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, + {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, + {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, + {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, + {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, + {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, + {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, + {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, ] [package.dependencies] @@ -6161,13 +6193,13 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] [[package]] name = "tomli" -version = "2.0.2" +version = "2.1.0" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.0.2-py3-none-any.whl", hash = "sha256:2ebe24485c53d303f690b0ec092806a085f07af5a5aa1464f3931eec36caaa38"}, - {file = "tomli-2.0.2.tar.gz", hash = "sha256:d46d457a85337051c36524bc5349dd91b1877838e2979ac5ced3e710ed8a60ed"}, + {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, + {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, ] [[package]] @@ -6389,13 +6421,13 @@ files = [ [[package]] name = "tqdm" -version = "4.66.6" +version = "4.67.0" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.66.6-py3-none-any.whl", hash = "sha256:223e8b5359c2efc4b30555531f09e9f2f3589bcd7fdd389271191031b49b7a63"}, - {file = "tqdm-4.66.6.tar.gz", hash = "sha256:4bdd694238bef1485ce839d67967ab50af8f9272aab687c0d7702a01da0be090"}, + {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, + {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, ] [package.dependencies] @@ -6403,6 +6435,7 @@ colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] telegram = ["requests"] @@ -6424,13 +6457,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.1" +version = "4.46.2" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.46.1-py3-none-any.whl", hash = "sha256:f77b251a648fd32e3d14b5e7e27c913b7c29154940f519e4c8c3aa6061df0f05"}, - {file = "transformers-4.46.1.tar.gz", hash = "sha256:16d79927d772edaf218820a96f9254e2211f9cd7fb3c308562d2d636c964a68c"}, + {file = "transformers-4.46.2-py3-none-any.whl", hash = "sha256:c921f4406b78e6518c97b618c5acd1cf8a4f2315b6b727f4bf9e01496eef849c"}, + {file = "transformers-4.46.2.tar.gz", hash = "sha256:3d85410881e1c074be767877bf33c83231ec11529f274a6044ecb20c157ba14e"}, ] [package.dependencies] @@ -6749,41 +6782,41 @@ test = ["covdefaults (>=2.3)", "coverage (>=7.2.7)", "coverage-enable-subprocess [[package]] name = "watchdog" -version = "5.0.3" +version = "6.0.0" description = "Filesystem events monitoring" optional = false python-versions = ">=3.9" files = [ - {file = "watchdog-5.0.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:85527b882f3facda0579bce9d743ff7f10c3e1e0db0a0d0e28170a7d0e5ce2ea"}, - {file = "watchdog-5.0.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:53adf73dcdc0ef04f7735066b4a57a4cd3e49ef135daae41d77395f0b5b692cb"}, - {file = "watchdog-5.0.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e25adddab85f674acac303cf1f5835951345a56c5f7f582987d266679979c75b"}, - {file = "watchdog-5.0.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f01f4a3565a387080dc49bdd1fefe4ecc77f894991b88ef927edbfa45eb10818"}, - {file = "watchdog-5.0.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:91b522adc25614cdeaf91f7897800b82c13b4b8ac68a42ca959f992f6990c490"}, - {file = "watchdog-5.0.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d52db5beb5e476e6853da2e2d24dbbbed6797b449c8bf7ea118a4ee0d2c9040e"}, - {file = "watchdog-5.0.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:94d11b07c64f63f49876e0ab8042ae034674c8653bfcdaa8c4b32e71cfff87e8"}, - {file = "watchdog-5.0.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:349c9488e1d85d0a58e8cb14222d2c51cbc801ce11ac3936ab4c3af986536926"}, - {file = "watchdog-5.0.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:53a3f10b62c2d569e260f96e8d966463dec1a50fa4f1b22aec69e3f91025060e"}, - {file = "watchdog-5.0.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:950f531ec6e03696a2414b6308f5c6ff9dab7821a768c9d5788b1314e9a46ca7"}, - {file = "watchdog-5.0.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ae6deb336cba5d71476caa029ceb6e88047fc1dc74b62b7c4012639c0b563906"}, - {file = "watchdog-5.0.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1021223c08ba8d2d38d71ec1704496471ffd7be42cfb26b87cd5059323a389a1"}, - {file = "watchdog-5.0.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:752fb40efc7cc8d88ebc332b8f4bcbe2b5cc7e881bccfeb8e25054c00c994ee3"}, - {file = "watchdog-5.0.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a2e8f3f955d68471fa37b0e3add18500790d129cc7efe89971b8a4cc6fdeb0b2"}, - {file = "watchdog-5.0.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b8ca4d854adcf480bdfd80f46fdd6fb49f91dd020ae11c89b3a79e19454ec627"}, - {file = "watchdog-5.0.3-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:90a67d7857adb1d985aca232cc9905dd5bc4803ed85cfcdcfcf707e52049eda7"}, - {file = "watchdog-5.0.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:720ef9d3a4f9ca575a780af283c8fd3a0674b307651c1976714745090da5a9e8"}, - {file = "watchdog-5.0.3-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:223160bb359281bb8e31c8f1068bf71a6b16a8ad3d9524ca6f523ac666bb6a1e"}, - {file = "watchdog-5.0.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:560135542c91eaa74247a2e8430cf83c4342b29e8ad4f520ae14f0c8a19cfb5b"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_aarch64.whl", hash = "sha256:dd021efa85970bd4824acacbb922066159d0f9e546389a4743d56919b6758b91"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_armv7l.whl", hash = "sha256:78864cc8f23dbee55be34cc1494632a7ba30263951b5b2e8fc8286b95845f82c"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_i686.whl", hash = "sha256:1e9679245e3ea6498494b3028b90c7b25dbb2abe65c7d07423ecfc2d6218ff7c"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_ppc64.whl", hash = "sha256:9413384f26b5d050b6978e6fcd0c1e7f0539be7a4f1a885061473c5deaa57221"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:294b7a598974b8e2c6123d19ef15de9abcd282b0fbbdbc4d23dfa812959a9e05"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_s390x.whl", hash = "sha256:26dd201857d702bdf9d78c273cafcab5871dd29343748524695cecffa44a8d97"}, - {file = "watchdog-5.0.3-py3-none-manylinux2014_x86_64.whl", hash = "sha256:0f9332243355643d567697c3e3fa07330a1d1abf981611654a1f2bf2175612b7"}, - {file = "watchdog-5.0.3-py3-none-win32.whl", hash = "sha256:c66f80ee5b602a9c7ab66e3c9f36026590a0902db3aea414d59a2f55188c1f49"}, - {file = "watchdog-5.0.3-py3-none-win_amd64.whl", hash = "sha256:f00b4cf737f568be9665563347a910f8bdc76f88c2970121c86243c8cfdf90e9"}, - {file = "watchdog-5.0.3-py3-none-win_ia64.whl", hash = "sha256:49f4d36cb315c25ea0d946e018c01bb028048023b9e103d3d3943f58e109dd45"}, - {file = "watchdog-5.0.3.tar.gz", hash = "sha256:108f42a7f0345042a854d4d0ad0834b741d421330d5f575b81cb27b883500176"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d1cdb490583ebd691c012b3d6dae011000fe42edb7a82ece80965b42abd61f26"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bc64ab3bdb6a04d69d4023b29422170b74681784ffb9463ed4870cf2f3e66112"}, + {file = "watchdog-6.0.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c897ac1b55c5a1461e16dae288d22bb2e412ba9807df8397a635d88f671d36c3"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:6eb11feb5a0d452ee41f824e271ca311a09e250441c262ca2fd7ebcf2461a06c"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:ef810fbf7b781a5a593894e4f439773830bdecb885e6880d957d5b9382a960d2"}, + {file = "watchdog-6.0.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:afd0fe1b2270917c5e23c2a65ce50c2a4abb63daafb0d419fde368e272a76b7c"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:bdd4e6f14b8b18c334febb9c4425a878a2ac20efd1e0b231978e7b150f92a948"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c7c15dda13c4eb00d6fb6fc508b3c0ed88b9d5d374056b239c4ad1611125c860"}, + {file = "watchdog-6.0.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6f10cb2d5902447c7d0da897e2c6768bca89174d0c6e1e30abec5421af97a5b0"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:490ab2ef84f11129844c23fb14ecf30ef3d8a6abafd3754a6f75ca1e6654136c"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:76aae96b00ae814b181bb25b1b98076d5fc84e8a53cd8885a318b42b6d3a5134"}, + {file = "watchdog-6.0.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a175f755fc2279e0b7312c0035d52e27211a5bc39719dd529625b1930917345b"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e6f0e77c9417e7cd62af82529b10563db3423625c5fce018430b249bf977f9e8"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:90c8e78f3b94014f7aaae121e6b909674df5b46ec24d6bebc45c44c56729af2a"}, + {file = "watchdog-6.0.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:e7631a77ffb1f7d2eefa4445ebbee491c720a5661ddf6df3498ebecae5ed375c"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:c7ac31a19f4545dd92fc25d200694098f42c9a8e391bc00bdd362c5736dbf881"}, + {file = "watchdog-6.0.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:9513f27a1a582d9808cf21a07dae516f0fab1cf2d7683a742c498b93eedabb11"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7a0e56874cfbc4b9b05c60c8a1926fedf56324bb08cfbc188969777940aef3aa"}, + {file = "watchdog-6.0.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:e6439e374fc012255b4ec786ae3c4bc838cd7309a540e5fe0952d03687d8804e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_aarch64.whl", hash = "sha256:7607498efa04a3542ae3e05e64da8202e58159aa1fa4acddf7678d34a35d4f13"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_armv7l.whl", hash = "sha256:9041567ee8953024c83343288ccc458fd0a2d811d6a0fd68c4c22609e3490379"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_i686.whl", hash = "sha256:82dc3e3143c7e38ec49d61af98d6558288c415eac98486a5c581726e0737c00e"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64.whl", hash = "sha256:212ac9b8bf1161dc91bd09c048048a95ca3a4c4f5e5d4a7d1b1a7d5752a7f96f"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_ppc64le.whl", hash = "sha256:e3df4cbb9a450c6d49318f6d14f4bbc80d763fa587ba46ec86f99f9e6876bb26"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_s390x.whl", hash = "sha256:2cce7cfc2008eb51feb6aab51251fd79b85d9894e98ba847408f662b3395ca3c"}, + {file = "watchdog-6.0.0-py3-none-manylinux2014_x86_64.whl", hash = "sha256:20ffe5b202af80ab4266dcd3e91aae72bf2da48c0d33bdb15c66658e685e94e2"}, + {file = "watchdog-6.0.0-py3-none-win32.whl", hash = "sha256:07df1fdd701c5d4c8e55ef6cf55b8f0120fe1aef7ef39a1c6fc6bc2e606d517a"}, + {file = "watchdog-6.0.0-py3-none-win_amd64.whl", hash = "sha256:cbafb470cf848d93b5d013e2ecb245d4aa1c8fd0504e863ccefa32445359d680"}, + {file = "watchdog-6.0.0-py3-none-win_ia64.whl", hash = "sha256:a1914259fa9e1454315171103c6a30961236f508b9b623eae470268bbcc6a22f"}, + {file = "watchdog-6.0.0.tar.gz", hash = "sha256:9ddf7c82fda3ae8e24decda1338ede66e1c99883db93711d8fb941eaa2d8c282"}, ] [package.extras] @@ -6813,13 +6846,13 @@ files = [ [[package]] name = "wheel" -version = "0.44.0" +version = "0.45.0" description = "A built-package format for Python" optional = false python-versions = ">=3.8" files = [ - {file = "wheel-0.44.0-py3-none-any.whl", hash = "sha256:2376a90c98cc337d18623527a97c31797bd02bad0033d41547043a1cbfbe448f"}, - {file = "wheel-0.44.0.tar.gz", hash = "sha256:a29c3f2817e95ab89aa4660681ad547c0e9547f20e75b0562fe7723c9a2a9d49"}, + {file = "wheel-0.45.0-py3-none-any.whl", hash = "sha256:52f0baa5e6522155090a09c6bd95718cc46956d1b51d537ea5454249edb671c7"}, + {file = "wheel-0.45.0.tar.gz", hash = "sha256:a57353941a3183b3d5365346b567a260a0602a0f8a635926a7dede41b94c674a"}, ] [package.extras] @@ -7060,93 +7093,93 @@ files = [ [[package]] name = "yarl" -version = "1.17.0" +version = "1.17.2" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d8715edfe12eee6f27f32a3655f38d6c7410deb482158c0b7d4b7fad5d07628"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1803bf2a7a782e02db746d8bd18f2384801bc1d108723840b25e065b116ad726"}, - {file = "yarl-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e66589110e20c2951221a938fa200c7aa134a8bdf4e4dc97e6b21539ff026d4"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7069d411cfccf868e812497e0ec4acb7c7bf8d684e93caa6c872f1e6f5d1664d"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cbf70ba16118db3e4b0da69dcde9d4d4095d383c32a15530564c283fa38a7c52"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0bc53cc349675b32ead83339a8de79eaf13b88f2669c09d4962322bb0f064cbc"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6aa18a402d1c80193ce97c8729871f17fd3e822037fbd7d9b719864018df746"}, - {file = "yarl-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d89c5bc701861cfab357aa0cd039bc905fe919997b8c312b4b0c358619c38d4d"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b728bdf38ca58f2da1d583e4af4ba7d4cd1a58b31a363a3137a8159395e7ecc7"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:5542e57dc15d5473da5a39fbde14684b0cc4301412ee53cbab677925e8497c11"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:e564b57e5009fb150cb513804d7e9e9912fee2e48835638f4f47977f88b4a39c"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:eb3c4cff524b4c1c1dba3a6da905edb1dfd2baf6f55f18a58914bbb2d26b59e1"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:05e13f389038842da930d439fbed63bdce3f7644902714cb68cf527c971af804"}, - {file = "yarl-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:153c38ee2b4abba136385af4467459c62d50f2a3f4bde38c7b99d43a20c143ef"}, - {file = "yarl-1.17.0-cp310-cp310-win32.whl", hash = "sha256:4065b4259d1ae6f70fd9708ffd61e1c9c27516f5b4fae273c41028afcbe3a094"}, - {file = "yarl-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:abf366391a02a8335c5c26163b5fe6f514cc1d79e74d8bf3ffab13572282368e"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:19a4fe0279626c6295c5b0c8c2bb7228319d2e985883621a6e87b344062d8135"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:cadd0113f4db3c6b56868d6a19ca6286f5ccfa7bc08c27982cf92e5ed31b489a"}, - {file = "yarl-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:60d6693eef43215b1ccfb1df3f6eae8db30a9ff1e7989fb6b2a6f0b468930ee8"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5bb8bf3843e1fa8cf3fe77813c512818e57368afab7ebe9ef02446fe1a10b492"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d2a5b35fd1d8d90443e061d0c8669ac7600eec5c14c4a51f619e9e105b136715"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c5bf17b32f392df20ab5c3a69d37b26d10efaa018b4f4e5643c7520d8eee7ac7"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:48f51b529b958cd06e78158ff297a8bf57b4021243c179ee03695b5dbf9cb6e1"}, - {file = "yarl-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5fcaa06bf788e19f913d315d9c99a69e196a40277dc2c23741a1d08c93f4d430"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:32f3ee19ff0f18a7a522d44e869e1ebc8218ad3ae4ebb7020445f59b4bbe5897"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:a4fb69a81ae2ec2b609574ae35420cf5647d227e4d0475c16aa861dd24e840b0"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:7bacc8b77670322132a1b2522c50a1f62991e2f95591977455fd9a398b4e678d"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:437bf6eb47a2d20baaf7f6739895cb049e56896a5ffdea61a4b25da781966e8b"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:30534a03c87484092080e3b6e789140bd277e40f453358900ad1f0f2e61fc8ec"}, - {file = "yarl-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b30df4ff98703649915144be6f0df3b16fd4870ac38a09c56d5d9e54ff2d5f96"}, - {file = "yarl-1.17.0-cp311-cp311-win32.whl", hash = "sha256:263b487246858e874ab53e148e2a9a0de8465341b607678106829a81d81418c6"}, - {file = "yarl-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:07055a9e8b647a362e7d4810fe99d8f98421575e7d2eede32e008c89a65a17bd"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:84095ab25ba69a8fa3fb4936e14df631b8a71193fe18bd38be7ecbe34d0f5512"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:02608fb3f6df87039212fc746017455ccc2a5fc96555ee247c45d1e9f21f1d7b"}, - {file = "yarl-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:13468d291fe8c12162b7cf2cdb406fe85881c53c9e03053ecb8c5d3523822cd9"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8da3f8f368fb7e2f052fded06d5672260c50b5472c956a5f1bd7bf474ae504ab"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ec0507ab6523980bed050137007c76883d941b519aca0e26d4c1ec1f297dd646"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:08fc76df7fd8360e9ff30e6ccc3ee85b8dbd6ed5d3a295e6ec62bcae7601b932"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8d522f390686acb6bab2b917dd9ca06740c5080cd2eaa5aef8827b97e967319d"}, - {file = "yarl-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:147c527a80bb45b3dcd6e63401af8ac574125d8d120e6afe9901049286ff64ef"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:24cf43bcd17a0a1f72284e47774f9c60e0bf0d2484d5851f4ddf24ded49f33c6"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:c28a44b9e0fba49c3857360e7ad1473fc18bc7f6659ca08ed4f4f2b9a52c75fa"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:350cacb2d589bc07d230eb995d88fcc646caad50a71ed2d86df533a465a4e6e1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:fd1ab1373274dea1c6448aee420d7b38af163b5c4732057cd7ee9f5454efc8b1"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4934e0f96dadc567edc76d9c08181633c89c908ab5a3b8f698560124167d9488"}, - {file = "yarl-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8d0a278170d75c88e435a1ce76557af6758bfebc338435b2eba959df2552163e"}, - {file = "yarl-1.17.0-cp312-cp312-win32.whl", hash = "sha256:61584f33196575a08785bb56db6b453682c88f009cd9c6f338a10f6737ce419f"}, - {file = "yarl-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:9987a439ad33a7712bd5bbd073f09ad10d38640425fa498ecc99d8aa064f8fc4"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8deda7b8eb15a52db94c2014acdc7bdd14cb59ec4b82ac65d2ad16dc234a109e"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:56294218b348dcbd3d7fce0ffd79dd0b6c356cb2a813a1181af730b7c40de9e7"}, - {file = "yarl-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:1fab91292f51c884b290ebec0b309a64a5318860ccda0c4940e740425a67b6b7"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5cf93fa61ff4d9c7d40482ce1a2c9916ca435e34a1b8451e17f295781ccc034f"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:261be774a0d71908c8830c33bacc89eef15c198433a8cc73767c10eeeb35a7d0"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:deec9693b67f6af856a733b8a3e465553ef09e5e8ead792f52c25b699b8f9e6e"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c804b07622ba50a765ca7fb8145512836ab65956de01307541def869e4a456c9"}, - {file = "yarl-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d013a7c9574e98c14831a8f22d27277688ec3b2741d0188ac01a910b009987a"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e2cfcba719bd494c7413dcf0caafb51772dec168c7c946e094f710d6aa70494e"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:c068aba9fc5b94dfae8ea1cedcbf3041cd4c64644021362ffb750f79837e881f"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:3616df510ffac0df3c9fa851a40b76087c6c89cbcea2de33a835fc80f9faac24"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:755d6176b442fba9928a4df787591a6a3d62d4969f05c406cad83d296c5d4e05"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c18f6e708d1cf9ff5b1af026e697ac73bea9cb70ee26a2b045b112548579bed2"}, - {file = "yarl-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5b937c216b6dee8b858c6afea958de03c5ff28406257d22b55c24962a2baf6fd"}, - {file = "yarl-1.17.0-cp313-cp313-win32.whl", hash = "sha256:d0131b14cb545c1a7bd98f4565a3e9bdf25a1bd65c83fc156ee5d8a8499ec4a3"}, - {file = "yarl-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:01c96efa4313c01329e88b7e9e9e1b2fc671580270ddefdd41129fa8d0db7696"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0d44f67e193f0a7acdf552ecb4d1956a3a276c68e7952471add9f93093d1c30d"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:16ea0aa5f890cdcb7ae700dffa0397ed6c280840f637cd07bffcbe4b8d68b985"}, - {file = "yarl-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cf5469dc7dcfa65edf5cc3a6add9f84c5529c6b556729b098e81a09a92e60e51"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e662bf2f6e90b73cf2095f844e2bc1fda39826472a2aa1959258c3f2a8500a2f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8260e88f1446904ba20b558fa8ce5d0ab9102747238e82343e46d056d7304d7e"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5dc16477a4a2c71e64c5d3d15d7ae3d3a6bb1e8b955288a9f73c60d2a391282f"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46027e326cecd55e5950184ec9d86c803f4f6fe4ba6af9944a0e537d643cdbe0"}, - {file = "yarl-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fc95e46c92a2b6f22e70afe07e34dbc03a4acd07d820204a6938798b16f4014f"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:16ca76c7ac9515320cd09d6cc083d8d13d1803f6ebe212b06ea2505fd66ecff8"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:eb1a5b97388f2613f9305d78a3473cdf8d80c7034e554d8199d96dcf80c62ac4"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:41fd5498975418cdc34944060b8fbeec0d48b2741068077222564bea68daf5a6"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:146ca582ed04a5664ad04b0e0603934281eaab5c0115a5a46cce0b3c061a56a1"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:6abb8c06107dbec97481b2392dafc41aac091a5d162edf6ed7d624fe7da0587a"}, - {file = "yarl-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d14be4613dd4f96c25feb4bd8c0d8ce0f529ab0ae555a17df5789e69d8ec0c5"}, - {file = "yarl-1.17.0-cp39-cp39-win32.whl", hash = "sha256:174d6a6cad1068f7850702aad0c7b1bca03bcac199ca6026f84531335dfc2646"}, - {file = "yarl-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:6af417ca2c7349b101d3fd557ad96b4cd439fdb6ab0d288e3f64a068eea394d0"}, - {file = "yarl-1.17.0-py3-none-any.whl", hash = "sha256:62dd42bb0e49423f4dd58836a04fcf09c80237836796025211bbe913f1524993"}, - {file = "yarl-1.17.0.tar.gz", hash = "sha256:d3f13583f378930377e02002b4085a3d025b00402d5a80911726d43a67911cd9"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93771146ef048b34201bfa382c2bf74c524980870bb278e6df515efaf93699ff"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8281db240a1616af2f9c5f71d355057e73a1409c4648c8949901396dc0a3c151"}, + {file = "yarl-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170ed4971bf9058582b01a8338605f4d8c849bd88834061e60e83b52d0c76870"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc61b005f6521fcc00ca0d1243559a5850b9dd1e1fe07b891410ee8fe192d0c0"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871e1b47eec7b6df76b23c642a81db5dd6536cbef26b7e80e7c56c2fd371382e"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a58a2f2ca7aaf22b265388d40232f453f67a6def7355a840b98c2d547bd037f"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:736bb076f7299c5c55dfef3eb9e96071a795cb08052822c2bb349b06f4cb2e0a"}, + {file = "yarl-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd51299e21da709eabcd5b2dd60e39090804431292daacbee8d3dabe39a6bc0"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:358dc7ddf25e79e1cc8ee16d970c23faee84d532b873519c5036dbb858965795"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:50d866f7b1a3f16f98603e095f24c0eeba25eb508c85a2c5939c8b3870ba2df8"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b9c4643e7d843a0dca9cd9d610a0876e90a1b2cbc4c5ba7930a0d90baf6903f"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d63123bfd0dce5f91101e77c8a5427c3872501acece8c90df457b486bc1acd47"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4e76381be3d8ff96a4e6c77815653063e87555981329cf8f85e5be5abf449021"}, + {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:734144cd2bd633a1516948e477ff6c835041c0536cef1d5b9a823ae29899665b"}, + {file = "yarl-1.17.2-cp310-cp310-win32.whl", hash = "sha256:26bfb6226e0c157af5da16d2d62258f1ac578d2899130a50433ffee4a5dfa673"}, + {file = "yarl-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:76499469dcc24759399accd85ec27f237d52dec300daaca46a5352fcbebb1071"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:792155279dc093839e43f85ff7b9b6493a8eaa0af1f94f1f9c6e8f4de8c63500"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38bc4ed5cae853409cb193c87c86cd0bc8d3a70fd2268a9807217b9176093ac6"}, + {file = "yarl-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4a8c83f6fcdc327783bdc737e8e45b2e909b7bd108c4da1892d3bc59c04a6d84"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6d5fed96f0646bfdf698b0a1cebf32b8aae6892d1bec0c5d2d6e2df44e1e2d"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:782ca9c58f5c491c7afa55518542b2b005caedaf4685ec814fadfcee51f02493"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff6af03cac0d1a4c3c19e5dcc4c05252411bf44ccaa2485e20d0a7c77892ab6e"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3f47930fbbed0f6377639503848134c4aa25426b08778d641491131351c2c8"}, + {file = "yarl-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1fa68a3c921365c5745b4bd3af6221ae1f0ea1bf04b69e94eda60e57958907f"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:187df91395c11e9f9dc69b38d12406df85aa5865f1766a47907b1cc9855b6303"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:93d1c8cc5bf5df401015c5e2a3ce75a5254a9839e5039c881365d2a9dcfc6dc2"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:11d86c6145ac5c706c53d484784cf504d7d10fa407cb73b9d20f09ff986059ef"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c42774d1d1508ec48c3ed29e7b110e33f5e74a20957ea16197dbcce8be6b52ba"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8e589379ef0407b10bed16cc26e7392ef8f86961a706ade0a22309a45414d7"}, + {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1056cadd5e850a1c026f28e0704ab0a94daaa8f887ece8dfed30f88befb87bb0"}, + {file = "yarl-1.17.2-cp311-cp311-win32.whl", hash = "sha256:be4c7b1c49d9917c6e95258d3d07f43cfba2c69a6929816e77daf322aaba6628"}, + {file = "yarl-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:ac8eda86cc75859093e9ce390d423aba968f50cf0e481e6c7d7d63f90bae5c9c"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd90238d3a77a0e07d4d6ffdebc0c21a9787c5953a508a2231b5f191455f31e9"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c74f0b0472ac40b04e6d28532f55cac8090e34c3e81f118d12843e6df14d0909"}, + {file = "yarl-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d486ddcaca8c68455aa01cf53d28d413fb41a35afc9f6594a730c9779545876"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25b7e93f5414b9a983e1a6c1820142c13e1782cc9ed354c25e933aebe97fcf2"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a0baff7827a632204060f48dca9e63fbd6a5a0b8790c1a2adfb25dc2c9c0d50"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:460024cacfc3246cc4d9f47a7fc860e4fcea7d1dc651e1256510d8c3c9c7cde0"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5870d620b23b956f72bafed6a0ba9a62edb5f2ef78a8849b7615bd9433384171"}, + {file = "yarl-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2941756754a10e799e5b87e2319bbec481ed0957421fba0e7b9fb1c11e40509f"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9611b83810a74a46be88847e0ea616794c406dbcb4e25405e52bff8f4bee2d0a"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cd7e35818d2328b679a13268d9ea505c85cd773572ebb7a0da7ccbca77b6a52e"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6b981316fcd940f085f646b822c2ff2b8b813cbd61281acad229ea3cbaabeb6b"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:688058e89f512fb7541cb85c2f149c292d3fa22f981d5a5453b40c5da49eb9e8"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56afb44a12b0864d17b597210d63a5b88915d680f6484d8d202ed68ade38673d"}, + {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:17931dfbb84ae18b287279c1f92b76a3abcd9a49cd69b92e946035cff06bcd20"}, + {file = "yarl-1.17.2-cp312-cp312-win32.whl", hash = "sha256:ff8d95e06546c3a8c188f68040e9d0360feb67ba8498baf018918f669f7bc39b"}, + {file = "yarl-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:4c840cc11163d3c01a9d8aad227683c48cd3e5be5a785921bcc2a8b4b758c4f3"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3294f787a437cb5d81846de3a6697f0c35ecff37a932d73b1fe62490bef69211"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1e7fedb09c059efee2533119666ca7e1a2610072076926fa028c2ba5dfeb78c"}, + {file = "yarl-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da9d3061e61e5ae3f753654813bc1cd1c70e02fb72cf871bd6daf78443e9e2b1"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c012dceadc695ccf69301bfdccd1fc4472ad714fe2dd3c5ab4d2046afddf29"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f11fd61d72d93ac23718d393d2a64469af40be2116b24da0a4ca6922df26807e"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46c465ad06971abcf46dd532f77560181387b4eea59084434bdff97524444032"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef6eee1a61638d29cd7c85f7fd3ac7b22b4c0fabc8fd00a712b727a3e73b0685"}, + {file = "yarl-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4434b739a8a101a837caeaa0137e0e38cb4ea561f39cb8960f3b1e7f4967a3fc"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:752485cbbb50c1e20908450ff4f94217acba9358ebdce0d8106510859d6eb19a"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:17791acaa0c0f89323c57da7b9a79f2174e26d5debbc8c02d84ebd80c2b7bff8"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c6ea72fe619fee5e6b5d4040a451d45d8175f560b11b3d3e044cd24b2720526"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db5ac3871ed76340210fe028f535392f097fb31b875354bcb69162bba2632ef4"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7a1606ba68e311576bcb1672b2a1543417e7e0aa4c85e9e718ba6466952476c0"}, + {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9bc27dd5cfdbe3dc7f381b05e6260ca6da41931a6e582267d5ca540270afeeb2"}, + {file = "yarl-1.17.2-cp313-cp313-win32.whl", hash = "sha256:52492b87d5877ec405542f43cd3da80bdcb2d0c2fbc73236526e5f2c28e6db28"}, + {file = "yarl-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:8e1bf59e035534ba4077f5361d8d5d9194149f9ed4f823d1ee29ef3e8964ace3"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c556fbc6820b6e2cda1ca675c5fa5589cf188f8da6b33e9fc05b002e603e44fa"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f44a4247461965fed18b2573f3a9eb5e2c3cad225201ee858726cde610daca"}, + {file = "yarl-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a3ede8c248f36b60227eb777eac1dbc2f1022dc4d741b177c4379ca8e75571a"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2654caaf5584449d49c94a6b382b3cb4a246c090e72453493ea168b931206a4d"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d41c684f286ce41fa05ab6af70f32d6da1b6f0457459a56cf9e393c1c0b2217"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2270d590997445a0dc29afa92e5534bfea76ba3aea026289e811bf9ed4b65a7f"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18662443c6c3707e2fc7fad184b4dc32dd428710bbe72e1bce7fe1988d4aa654"}, + {file = "yarl-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75ac158560dec3ed72f6d604c81090ec44529cfb8169b05ae6fcb3e986b325d9"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1fee66b32e79264f428dc8da18396ad59cc48eef3c9c13844adec890cd339db5"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:585ce7cd97be8f538345de47b279b879e091c8b86d9dbc6d98a96a7ad78876a3"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c019abc2eca67dfa4d8fb72ba924871d764ec3c92b86d5b53b405ad3d6aa56b0"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c6e659b9a24d145e271c2faf3fa6dd1fcb3e5d3f4e17273d9e0350b6ab0fe6e2"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:d17832ba39374134c10e82d137e372b5f7478c4cceeb19d02ae3e3d1daed8721"}, + {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc3003710e335e3f842ae3fd78efa55f11a863a89a72e9a07da214db3bf7e1f8"}, + {file = "yarl-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f5ffc6b7ace5b22d9e73b2a4c7305740a339fbd55301d52735f73e21d9eb3130"}, + {file = "yarl-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:48e424347a45568413deec6f6ee2d720de2cc0385019bedf44cd93e8638aa0ed"}, + {file = "yarl-1.17.2-py3-none-any.whl", hash = "sha256:dd7abf4f717e33b7487121faf23560b3a50924f80e4bef62b22dab441ded8f3b"}, + {file = "yarl-1.17.2.tar.gz", hash = "sha256:753eaaa0c7195244c84b5cc159dc8204b7fd99f716f11198f999f2332a86b178"}, ] [package.dependencies] @@ -7156,13 +7189,13 @@ propcache = ">=0.2.0" [[package]] name = "zipp" -version = "3.20.2" +version = "3.21.0" description = "Backport of pathlib-compatible object wrapper for zip files" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "zipp-3.20.2-py3-none-any.whl", hash = "sha256:a817ac80d6cf4b23bf7f2828b7cabf326f15a001bea8b1f9b49631780ba28350"}, - {file = "zipp-3.20.2.tar.gz", hash = "sha256:bc9eb26f4506fda01b81bcde0ca78103b6e62f991b381fec825435c836edbc29"}, + {file = "zipp-3.21.0-py3-none-any.whl", hash = "sha256:ac1bbe05fd2991f160ebce24ffbac5f6d11d83dc90891255885223d42b3cd931"}, + {file = "zipp-3.21.0.tar.gz", hash = "sha256:2c9958f6430a2040341a52eb608ed6dd93ef4392e02ffe219417c1b28b5dd1f4"}, ] [package.extras] From 926dfd29d51c52628fe9fe8acb0ad0121c88e58a Mon Sep 17 00:00:00 2001 From: "Peter W. J. Staar" <91719829+PeterStaar-IBM@users.noreply.github.com> Date: Tue, 19 Nov 2024 12:21:17 +0100 Subject: [PATCH 02/40] feat: added excel backend (#334) * feat: added excel backend Signed-off-by: Peter Staar * first msexcel backend Signed-off-by: Peter Staar * added tooling for the cli Signed-off-by: Peter Staar * first working version for excel parsing of tables Signed-off-by: Peter Staar * added proper typing for mypy Signed-off-by: Peter Staar * added proper typing for mypy Signed-off-by: Peter Staar * refactor EXCEL to XLSX Signed-off-by: Peter Staar * added the unit tests Signed-off-by: Peter Staar * ran poetry lock Signed-off-by: Peter Staar * adding images to output [WIP] Signed-off-by: Peter Staar * reformatted the code Signed-off-by: Peter Staar * fixed the mypy Signed-off-by: Peter Staar * updated the msexcel Signed-off-by: Peter Staar * updated the msexcel (2) Signed-off-by: Peter Staar * fixed the mypy Signed-off-by: Peter Staar * added tests for merged cells in excel Signed-off-by: Peter Staar * reformatted the code Signed-off-by: Peter Staar --------- Signed-off-by: Peter Staar --- docling/backend/msexcel_backend.py | 374 ++ docling/datamodel/base_models.py | 6 + docling/document_converter.py | 9 + poetry.lock | 212 +- pyproject.toml | 2 + .../groundtruth/docling_v2/test-01.xlsx.itxt | 10 + .../groundtruth/docling_v2/test-01.xlsx.json | 3240 +++++++++++++++++ .../groundtruth/docling_v2/test-01.xlsx.md | 51 + tests/data/xlsx/test-01.xlsx | Bin 0 -> 21387 bytes tests/test_backend_msexcel.py | 77 + 10 files changed, 3887 insertions(+), 94 deletions(-) create mode 100644 docling/backend/msexcel_backend.py create mode 100644 tests/data/groundtruth/docling_v2/test-01.xlsx.itxt create mode 100644 tests/data/groundtruth/docling_v2/test-01.xlsx.json create mode 100644 tests/data/groundtruth/docling_v2/test-01.xlsx.md create mode 100644 tests/data/xlsx/test-01.xlsx create mode 100644 tests/test_backend_msexcel.py diff --git a/docling/backend/msexcel_backend.py b/docling/backend/msexcel_backend.py new file mode 100644 index 00000000..508b0e8d --- /dev/null +++ b/docling/backend/msexcel_backend.py @@ -0,0 +1,374 @@ +import logging +from io import BytesIO +from pathlib import Path +from typing import Dict, Set, Tuple, Union + +from docling_core.types.doc import ( + DoclingDocument, + DocumentOrigin, + GroupLabel, + ImageRef, + TableCell, + TableData, +) + +# from lxml import etree +from openpyxl import Workbook, load_workbook +from openpyxl.cell.cell import Cell +from openpyxl.drawing.image import Image +from openpyxl.worksheet.worksheet import Worksheet + +from docling.backend.abstract_backend import DeclarativeDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import InputDocument + +_log = logging.getLogger(__name__) + +from typing import Any, List + +from pydantic import BaseModel + + +class ExcelCell(BaseModel): + row: int + col: int + text: str + row_span: int + col_span: int + + +class ExcelTable(BaseModel): + num_rows: int + num_cols: int + data: List[ExcelCell] + + +class MsExcelDocumentBackend(DeclarativeDocumentBackend): + + def __init__(self, in_doc: "InputDocument", path_or_stream: Union[BytesIO, Path]): + super().__init__(in_doc, path_or_stream) + + # Initialise the parents for the hierarchy + self.max_levels = 10 + + self.parents: Dict[int, Any] = {} + for i in range(-1, self.max_levels): + self.parents[i] = None + + self.workbook = None + try: + if isinstance(self.path_or_stream, BytesIO): + self.workbook = load_workbook(filename=self.path_or_stream) + + elif isinstance(self.path_or_stream, Path): + self.workbook = load_workbook(filename=str(self.path_or_stream)) + + self.valid = True + except Exception as e: + self.valid = False + + raise RuntimeError( + f"MsPowerpointDocumentBackend could not load document with hash {self.document_hash}" + ) from e + + def is_valid(self) -> bool: + _log.info(f"valid: {self.valid}") + return self.valid + + @classmethod + def supports_pagination(cls) -> bool: + return True + + def unload(self): + if isinstance(self.path_or_stream, BytesIO): + self.path_or_stream.close() + + self.path_or_stream = None + + @classmethod + def supported_formats(cls) -> Set[InputFormat]: + return {InputFormat.XLSX} + + def convert(self) -> DoclingDocument: + # Parses the XLSX into a structured document model. + + origin = DocumentOrigin( + filename=self.file.name or "file.xlsx", + mimetype="application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + binary_hash=self.document_hash, + ) + + doc = DoclingDocument(name=self.file.stem or "file.xlsx", origin=origin) + + if self.is_valid(): + doc = self._convert_workbook(doc) + else: + raise RuntimeError( + f"Cannot convert doc with {self.document_hash} because the backend failed to init." + ) + + return doc + + def _convert_workbook(self, doc: DoclingDocument) -> DoclingDocument: + + if self.workbook is not None: + + # Iterate over all sheets + for sheet_name in self.workbook.sheetnames: + _log.info(f"Processing sheet: {sheet_name}") + + # Access the sheet by name + sheet = self.workbook[sheet_name] + + self.parents[0] = doc.add_group( + parent=None, + label=GroupLabel.SECTION, + name=f"sheet: {sheet_name}", + ) + + doc = self._convert_sheet(doc, sheet) + else: + _log.error("Workbook is not initialized.") + + return doc + + def _convert_sheet(self, doc: DoclingDocument, sheet: Worksheet): + + doc = self._find_tables_in_sheet(doc, sheet) + + doc = self._find_images_in_sheet(doc, sheet) + + return doc + + def _find_tables_in_sheet(self, doc: DoclingDocument, sheet: Worksheet): + + tables = self._find_data_tables(sheet) + + for excel_table in tables: + num_rows = excel_table.num_rows + num_cols = excel_table.num_cols + + table_data = TableData( + num_rows=num_rows, + num_cols=num_cols, + table_cells=[], + ) + + for excel_cell in excel_table.data: + + cell = TableCell( + text=excel_cell.text, + row_span=excel_cell.row_span, + col_span=excel_cell.col_span, + start_row_offset_idx=excel_cell.row, + end_row_offset_idx=excel_cell.row + excel_cell.row_span, + start_col_offset_idx=excel_cell.col, + end_col_offset_idx=excel_cell.col + excel_cell.col_span, + col_header=False, + row_header=False, + ) + table_data.table_cells.append(cell) + + doc.add_table(data=table_data, parent=self.parents[0]) + + return doc + + def _find_data_tables(self, sheet: Worksheet): + """ + Find all compact rectangular data tables in a sheet. + """ + # _log.info("find_data_tables") + + tables = [] # List to store found tables + visited: set[Tuple[int, int]] = set() # Track already visited cells + + # Iterate over all cells in the sheet + for ri, row in enumerate(sheet.iter_rows(values_only=False)): + for rj, cell in enumerate(row): + + # Skip empty or already visited cells + if cell.value is None or (ri, rj) in visited: + continue + + # If the cell starts a new table, find its bounds + table_bounds, visited_cells = self._find_table_bounds( + sheet, ri, rj, visited + ) + + visited.update(visited_cells) # Mark these cells as visited + tables.append(table_bounds) + + return tables + + def _find_table_bounds( + self, + sheet: Worksheet, + start_row: int, + start_col: int, + visited: set[Tuple[int, int]], + ): + """ + Determine the bounds of a compact rectangular table. + Returns: + - A dictionary with the bounds and data. + - A set of visited cell coordinates. + """ + _log.info("find_table_bounds") + + max_row = self._find_table_bottom(sheet, start_row, start_col) + max_col = self._find_table_right(sheet, start_row, start_col) + + # Collect the data within the bounds + data = [] + visited_cells = set() + for ri in range(start_row, max_row + 1): + for rj in range(start_col, max_col + 1): + + cell = sheet.cell(row=ri + 1, column=rj + 1) # 1-based indexing + + # Check if the cell belongs to a merged range + row_span = 1 + col_span = 1 + + # _log.info(sheet.merged_cells.ranges) + for merged_range in sheet.merged_cells.ranges: + + if ( + merged_range.min_row <= ri + 1 + and ri + 1 <= merged_range.max_row + and merged_range.min_col <= rj + 1 + and rj + 1 <= merged_range.max_col + ): + + row_span = merged_range.max_row - merged_range.min_row + 1 + col_span = merged_range.max_col - merged_range.min_col + 1 + break + + if (ri, rj) not in visited_cells: + data.append( + ExcelCell( + row=ri - start_row, + col=rj - start_col, + text=str(cell.value), + row_span=row_span, + col_span=col_span, + ) + ) + # _log.info(f"cell: {ri}, {rj} -> {ri - start_row}, {rj - start_col}, {row_span}, {col_span}: {str(cell.value)}") + + # Mark all cells in the span as visited + for span_row in range(ri, ri + row_span): + for span_col in range(rj, rj + col_span): + visited_cells.add((span_row, span_col)) + + return ( + ExcelTable( + num_rows=max_row + 1 - start_row, + num_cols=max_col + 1 - start_col, + data=data, + ), + visited_cells, + ) + + def _find_table_bottom(self, sheet: Worksheet, start_row: int, start_col: int): + """Function to find the bottom boundary of the table""" + + max_row = start_row + + while max_row < sheet.max_row - 1: + # Get the cell value or check if it is part of a merged cell + cell = sheet.cell(row=max_row + 2, column=start_col + 1) + + # Check if the cell is part of a merged range + merged_range = next( + (mr for mr in sheet.merged_cells.ranges if cell.coordinate in mr), + None, + ) + + if cell.value is None and not merged_range: + break # Stop if the cell is empty and not merged + + # Expand max_row to include the merged range if applicable + if merged_range: + max_row = max(max_row, merged_range.max_row - 1) + else: + max_row += 1 + + return max_row + + def _find_table_right(self, sheet: Worksheet, start_row: int, start_col: int): + """Function to find the right boundary of the table""" + + max_col = start_col + + while max_col < sheet.max_column - 1: + # Get the cell value or check if it is part of a merged cell + cell = sheet.cell(row=start_row + 1, column=max_col + 2) + + # Check if the cell is part of a merged range + merged_range = next( + (mr for mr in sheet.merged_cells.ranges if cell.coordinate in mr), + None, + ) + + if cell.value is None and not merged_range: + break # Stop if the cell is empty and not merged + + # Expand max_col to include the merged range if applicable + if merged_range: + max_col = max(max_col, merged_range.max_col - 1) + else: + max_col += 1 + + return max_col + + def _find_images_in_sheet( + self, doc: DoclingDocument, sheet: Worksheet + ) -> DoclingDocument: + + # FIXME: mypy does not agree with _images ... + """ + # Iterate over images in the sheet + for idx, image in enumerate(sheet._images): # Access embedded images + + image_bytes = BytesIO(image.ref.blob) + pil_image = Image.open(image_bytes) + + doc.add_picture( + parent=self.parents[0], + image=ImageRef.from_pil(image=pil_image, dpi=72), + caption=None, + ) + """ + + # FIXME: mypy does not agree with _charts ... + """ + for idx, chart in enumerate(sheet._charts): # Access embedded charts + chart_path = f"chart_{idx + 1}.png" + _log.info( + f"Chart found, but dynamic rendering is required for: {chart_path}" + ) + + _log.info(f"Chart {idx + 1}:") + + # Chart type + _log.info(f"Type: {type(chart).__name__}") + + # Title + if chart.title: + _log.info(f"Title: {chart.title}") + else: + _log.info("No title") + + # Data series + for series in chart.series: + _log.info(" => series ...") + _log.info(f"Data Series: {series.title}") + _log.info(f"Values: {series.values}") + _log.info(f"Categories: {series.categories}") + + # Position + # _log.info(f"Anchor Cell: {chart.anchor}") + """ + + return doc diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index d06b6097..311d6d01 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -32,6 +32,7 @@ class InputFormat(str, Enum): PDF = "pdf" ASCIIDOC = "asciidoc" MD = "md" + XLSX = "xlsx" class OutputFormat(str, Enum): @@ -49,6 +50,7 @@ FormatToExtensions: Dict[InputFormat, List[str]] = { InputFormat.HTML: ["html", "htm", "xhtml"], InputFormat.IMAGE: ["jpg", "jpeg", "png", "tif", "tiff", "bmp"], InputFormat.ASCIIDOC: ["adoc", "asciidoc", "asc"], + InputFormat.XLSX: ["xlsx"], } FormatToMimeType: Dict[InputFormat, List[str]] = { @@ -72,7 +74,11 @@ FormatToMimeType: Dict[InputFormat, List[str]] = { InputFormat.PDF: ["application/pdf"], InputFormat.ASCIIDOC: ["text/asciidoc"], InputFormat.MD: ["text/markdown", "text/x-markdown"], + InputFormat.XLSX: [ + "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet" + ], } + MimeTypeToFormat = { mime: fmt for fmt, mimes in FormatToMimeType.items() for mime in mimes } diff --git a/docling/document_converter.py b/docling/document_converter.py index f2d29e62..4e436d07 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -12,6 +12,7 @@ from docling.backend.asciidoc_backend import AsciiDocBackend from docling.backend.docling_parse_backend import DoclingParseDocumentBackend from docling.backend.html_backend import HTMLDocumentBackend from docling.backend.md_backend import MarkdownDocumentBackend +from docling.backend.msexcel_backend import MsExcelDocumentBackend from docling.backend.mspowerpoint_backend import MsPowerpointDocumentBackend from docling.backend.msword_backend import MsWordDocumentBackend from docling.datamodel.base_models import ConversionStatus, DocumentStream, InputFormat @@ -44,6 +45,11 @@ class FormatOption(BaseModel): return self +class ExcelFormatOption(FormatOption): + pipeline_cls: Type = SimplePipeline + backend: Type[AbstractDocumentBackend] = MsExcelDocumentBackend + + class WordFormatOption(FormatOption): pipeline_cls: Type = SimplePipeline backend: Type[AbstractDocumentBackend] = MsWordDocumentBackend @@ -80,6 +86,9 @@ class ImageFormatOption(FormatOption): _format_to_default_options = { + InputFormat.XLSX: FormatOption( + pipeline_cls=SimplePipeline, backend=MsExcelDocumentBackend + ), InputFormat.DOCX: FormatOption( pipeline_cls=SimplePipeline, backend=MsWordDocumentBackend ), diff --git a/poetry.lock b/poetry.lock index c7e040d8..439f9136 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.2" +version = "3.11.4" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:783741f534c14957fbe657d62a34b947ec06db23d45a2fd4a8aeb73d9c84d7e6"}, - {file = "aiohttp-3.11.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:435f7a08d8aa42371a94e7c141205a9cb092ba551084b5e0c57492e6673601a3"}, - {file = "aiohttp-3.11.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c681f34e2814bc6e1eef49752b338061b94a42c92734d0be9513447d3f83718c"}, - {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:73a664478ae1ea011b5a710fb100b115ca8b2146864fa0ce4143ff944df714b8"}, - {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f1d06c8fd8b453c3e553c956bd3b8395100401060430572174bb7876dd95ad49"}, - {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b1f4844909321ef2c1cee50ddeccbd6018cd8c8d1ddddda3f553e94a5859497"}, - {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cdc6f8dce09281ae534eaf08a54f0d38612398375f28dad733a8885f3bf9b978"}, - {file = "aiohttp-3.11.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d2d942421cf3a1d1eceae8fa192f1fbfb74eb9d3e207d35ad2696bd2ce2c987c"}, - {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:08ebe7a1d6c1e5ca766d68407280d69658f5f98821c2ba6c41c63cabfed159af"}, - {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2793d3297f3e49015140e6d3ea26142c967e07998e2fb00b6ee8d041138fbc4e"}, - {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4a23475d8d5c56e447b7752a1e2ac267c1f723f765e406c81feddcd16cdc97bc"}, - {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:556564d89e2f4a6e8fe000894c03e4e84cf0b6cfa5674e425db122633ee244d1"}, - {file = "aiohttp-3.11.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:57993f406ce3f114b2a6756d7809be3ffd0cc40f33e8f8b9a4aa1b027fd4e3eb"}, - {file = "aiohttp-3.11.2-cp310-cp310-win32.whl", hash = "sha256:177b000efaf8d2f7012c649e8aee5b0bf488677b1162be5e7511aa4f9d567607"}, - {file = "aiohttp-3.11.2-cp310-cp310-win_amd64.whl", hash = "sha256:ff5d22eece44528023254b595c670dfcf9733ac6af74c4b6cb4f6a784dc3870c"}, - {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:50e0aee4adc9abcd2109c618a8d1b2c93b85ac277b24a003ab147d91e068b06d"}, - {file = "aiohttp-3.11.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:9aa4e68f1e4f303971ec42976fb170204fb5092de199034b57199a1747e78a2d"}, - {file = "aiohttp-3.11.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d84930b4145991214602372edd7305fc76b700220db79ac0dd57d3afd0f0a1ca"}, - {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b4ec8afd362356b8798c8caa806e91deb3f0602d8ffae8e91d2d3ced2a90c35e"}, - {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fb0544a0e8294a5a5e20d3cacdaaa9a911d7c0a9150f5264aef36e7d8fdfa07e"}, - {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7b0a1618060e3f5aa73d3526ca2108a16a1b6bf86612cd0bb2ddcbef9879d06"}, - {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d878a0186023ac391861958035174d0486f3259cabf8fd94e591985468da3ea"}, - {file = "aiohttp-3.11.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1e33a7eddcd07545ccf5c3ab230f60314a17dc33e285475e8405e26e21f02660"}, - {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:4d7fad8c456d180a6d2f44c41cfab4b80e2e81451815825097db48b8293f59d5"}, - {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:8d954ba0eae7f33884d27dc00629ca4389d249eb8d26ca07c30911257cae8c96"}, - {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:afa55e863224e664a782effa62245df73fdfc55aee539bed6efacf35f6d4e4b7"}, - {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:10a5f91c319d9d4afba812f72984816b5fcd20742232ff7ecc1610ffbf3fc64d"}, - {file = "aiohttp-3.11.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:6e8e19a80ba194db5c06915a9df23c0c06e0e9ca9a4db9386a6056cca555a027"}, - {file = "aiohttp-3.11.2-cp311-cp311-win32.whl", hash = "sha256:9c8d1db4f65bbc9d75b7b271d68fb996f1c8c81a525263862477d93611856c2d"}, - {file = "aiohttp-3.11.2-cp311-cp311-win_amd64.whl", hash = "sha256:2adb967454e10e69478ba4a8d8afbba48a7c7a8619216b7c807f8481cc66ddfb"}, - {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:f833a80d9de9307d736b6af58c235b17ef7f90ebea7b9c49cd274dec7a66a2f1"}, - {file = "aiohttp-3.11.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:382f853516664d2ebfc75dc01da4a10fdef5edcb335fe7b45cf471ce758ecb18"}, - {file = "aiohttp-3.11.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d3a2bcf6c81639a165da93469e1e0aff67c956721f3fa9c0560f07dd1e505116"}, - {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de3b4d5fb5d69749104b880a157f38baeea7765c93d9cd3837cedd5b84729e10"}, - {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0a90a0dc4b054b5af299a900bf950fe8f9e3e54322bc405005f30aa5cacc5c98"}, - {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:32334f35824811dd20a12cc90825d000e6b50faaeaa71408d42269151a66140d"}, - {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0cba0b8d25aa2d450762f3dd6df85498f5e7c3ad0ddeb516ef2b03510f0eea32"}, - {file = "aiohttp-3.11.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bbb2dbc2701ab7e9307ca3a8fa4999c5b28246968e0a0202a5afabf48a42e22"}, - {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:97fba98fc5d9ccd3d33909e898d00f2494d6a9eec7cbda3d030632e2c8bb4d00"}, - {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0ebdf5087e2ce903d8220cc45dcece90c2199ae4395fd83ca616fcc81010db2c"}, - {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:122768e3ae9ce74f981b46edefea9c6e5a40aea38aba3ac50168e6370459bf20"}, - {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:5587da333b7d280a312715b843d43e734652aa382cba824a84a67c81f75b338b"}, - {file = "aiohttp-3.11.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:85de9904bc360fd29a98885d2bfcbd4e02ab33c53353cb70607f2bea2cb92468"}, - {file = "aiohttp-3.11.2-cp312-cp312-win32.whl", hash = "sha256:b470de64d17156c37e91effc109d3b032b39867000e2c126732fe01d034441f9"}, - {file = "aiohttp-3.11.2-cp312-cp312-win_amd64.whl", hash = "sha256:3f617a48b70f4843d54f52440ea1e58da6bdab07b391a3a6aed8d3b311a4cc04"}, - {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:5d90b5a3b0f32a5fecf5dd83d828713986c019585f5cddf40d288ff77f366615"}, - {file = "aiohttp-3.11.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:d23854e5867650d40cba54d49956aad8081452aa80b2cf0d8c310633f4f48510"}, - {file = "aiohttp-3.11.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:486273d3b5af75a80c31c311988931bdd2a4b96a74d5c7f422bad948f99988ef"}, - {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9075313f8e41b481e4cb10af405054564b0247dc335db5398ed05f8ec38787e2"}, - {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:44b69c69c194ffacbc50165911cf023a4b1b06422d1e1199d3aea82eac17004e"}, - {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b339d91ac9060bd6ecdc595a82dc151045e5d74f566e0864ef3f2ba0887fec42"}, - {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64e8f5178958a9954043bc8cd10a5ae97352c3f2fc99aa01f2aebb0026010910"}, - {file = "aiohttp-3.11.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3129151378f858cdc4a0a4df355c9a0d060ab49e2eea7e62e9f085bac100551b"}, - {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:14eb6c628432720e41b4fab1ada879d56cfe7034159849e083eb536b4c2afa99"}, - {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:e57a10aacedcf24666f4c90d03e599f71d172d1c5e00dcf48205c445806745b0"}, - {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:66e58a2e8c7609a3545c4b38fb8b01a6b8346c4862e529534f7674c5265a97b8"}, - {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9b6d15adc9768ff167614ca853f7eeb6ee5f1d55d5660e3af85ce6744fed2b82"}, - {file = "aiohttp-3.11.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:2914061f5ca573f990ec14191e6998752fa8fe50d518e3405410353c3f44aa5d"}, - {file = "aiohttp-3.11.2-cp313-cp313-win32.whl", hash = "sha256:1c2496182e577042e0e07a328d91c949da9e77a2047c7291071e734cd7a6e780"}, - {file = "aiohttp-3.11.2-cp313-cp313-win_amd64.whl", hash = "sha256:cccb2937bece1310c5c0163d0406aba170a2e5fb1f0444d7b0e7fdc9bd6bb713"}, - {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:994cb893936dd2e1803655ae8667a45066bfd53360b148e22b4e3325cc5ea7a3"}, - {file = "aiohttp-3.11.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3666c750b73ce463a413692e3a57c60f7089e2d9116a2aa5a0f0eaf2ae325148"}, - {file = "aiohttp-3.11.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6ad9a7d2a3a0f235184426425f80bd3b26c66b24fd5fddecde66be30c01ebe6e"}, - {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4c979fc92aba66730b66099cd5becb42d869a26c0011119bc1c2478408a8bf7a"}, - {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:766d0ebf8703d28f854f945982aa09224d5a27a29594c70d921c43c3930fe7ac"}, - {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:79efd1ee3827b2f16797e14b1e45021206c3271249b4d0025014466d416d7413"}, - {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5d6e069b882c1fdcbe5577dc4be372eda705180197140577a4cddb648c29d22e"}, - {file = "aiohttp-3.11.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5e9a766c346b2ed7e88937919d84ed64b4ef489dad1d8939f806ee52901dc142"}, - {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2b02a68b9445c70d7f5c8b578c5f5e5866b1d67ca23eb9e8bc8658ae9e3e2c74"}, - {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:374baefcb1b6275f350da605951f5f02487a9bc84a574a7d5b696439fabd49a3"}, - {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:d2f991c18132f3e505c108147925372ffe4549173b7c258cf227df1c5977a635"}, - {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:34f37c59b12bc3afc52bab6fcd9cd3be82ff01c4598a84cbea934ccb3a9c54a0"}, - {file = "aiohttp-3.11.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:33af11eca7bb0f5c6ffaf5e7d9d2336c2448f9c6279b93abdd6f3c35f9ee321f"}, - {file = "aiohttp-3.11.2-cp39-cp39-win32.whl", hash = "sha256:83a70e22e0f6222effe7f29fdeba6c6023f9595e59a0479edacfbd7de4b77bb7"}, - {file = "aiohttp-3.11.2-cp39-cp39-win_amd64.whl", hash = "sha256:c28c1677ea33ccb8b14330560094cc44d3ff4fad617a544fd18beb90403fe0f1"}, - {file = "aiohttp-3.11.2.tar.gz", hash = "sha256:68d1f46f9387db3785508f5225d3acbc5825ca13d9c29f2b5cce203d5863eb79"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60f8206818e3582c999c999c799ab068e14f1870ade47d1fe8536dbfd88010b"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5786e5926f888ce3a996d38d9c9b8f9306f399edb1f1ca3ce7760dab9b1043c"}, + {file = "aiohttp-3.11.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:262e45dbd7f1829bcb024259f65b2cf69d1ef5b37626af6955a1c487613aeb3a"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:696adff3594bd449e0fe287441062bdc6f5300928426275b39ed27884ba083a7"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd1411ecfc070af4df129e81fe42c799d95d81c29c22d2c3e4341d974c38f1a"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06defa9017ab50d215446ebbee294e07eb2fcee72d9a909a08192cfacbd43a08"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bc936d10b8fa3f2aa66e59e034085208b588442263400ddb042703d0db99421"}, + {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:769457243dc4bc902d376cd14c5c7ec234a4faadb4f283dc2738f004cce9a9e1"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a360c18b2cb391fec9585ba1efc55150e2fbc6100308113117dfea521e810d8"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3e9fd9c11299d6d230eb2669fd1ed0238d33970e36b495b0432ace7f157fc931"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0ccbe8ece8a7796ef41b86a3240034c5918d9b324c2ae48fa0be33565e297c64"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9a8b6b3c788a8a6f88f5ce23d729cfde7a2ccebbeb09db0822ef266de0445a27"}, + {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cbe3e356523d0b336543996f92a0e65f760be82447db21c95c60392c8075ff5c"}, + {file = "aiohttp-3.11.4-cp310-cp310-win32.whl", hash = "sha256:a54424050d1eb36edfef913b1bc8552d52a37864c0ea7df3e1e764663e11053a"}, + {file = "aiohttp-3.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:a51f983d91edae7777b5a2af8e5d83224ba01284502c6874a17647ad6cbf0211"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:89261fee04715083ef3b5a0d222b094021793c1728b8ff21da361c79f6384095"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ef6eb1367046fb22085f10c5c84ea2efd0d836ad8088306d652ab1d743faf9e"}, + {file = "aiohttp-3.11.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d68bb99bc6a4b0a3eceb95a246f5a0262e600e094b5178c2b1ab0f4bcbae6729"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a550b4ff70d06c15057d75ddad89a3e7c496e0609d28c567c20b61cd1265c0a6"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b41e0fb3b415beccd6d0c6e5f3ee34b7952cd76120a1db3e45507b83dc5ef81"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8feffa8396724116be5bc05bf4fcba0c738cbe908c82a95f71371e32b28cd2ca"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd5b7947e23a08c70d4c1924809b91211f14136ffd13d303dc487913cfebfeb"}, + {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab5c6a521b156edef13a57a6d524903c547573ff8101e3d1bbe9ee1b97267973"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:010bc9606f798eda8ef071759c7b163893071502bcaedc7d5dc49f9d8f12e553"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e7d182164aebad4e2faf2742ee7486d4af73d933461adbd8f183ac9b1837323c"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:88e681c0d17bb285d2ccbb73ae77ef86339b632ee7967044c2284411120b9730"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0d2cea21ec05b832e9f6a2390b23d32ce5575f6cf4812bd171d4493f59c101fe"}, + {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:635397b5b4de2397f8136f8fd15c8ebee560e36473195c7aa992ffb8e46acdd3"}, + {file = "aiohttp-3.11.4-cp311-cp311-win32.whl", hash = "sha256:cb2d5a24586b508f658ddd710f7d4b7e4f5656cb5d569aeb1f432c1c3704347a"}, + {file = "aiohttp-3.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:ee081375d10fa2f3f7b0d050c8b9c1ae23190e1d9be256035bf8a41059c4df3a"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5cd60673be31449c63f59886f3581478bbdfaddd87e7394a4d73ad134d9be9b9"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ff6105856ae688b29d5daaede1256f5e02e9d5cb3059f8f5ef55d975c2e6992"}, + {file = "aiohttp-3.11.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b169507c98b924fd68b82ae366c285daf6d22456835294c329c3226d61e1f69d"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec84106c8b7ff347be06bf579c298a23b6d1d2225c57273a8cd502f257125d4"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d53b0888f984f4f0c216a37577ee7e7b1ed1dac89cdd2fde61bf2ccb32009b"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:822dedad93947fcb1096cc41ee8fd32e9f652777561a37c740e5335699f01cea"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aef239c307f3a3f830933d612c0aef4ad4b3aa9ce5233a0954262a00f5c379f1"}, + {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49eb5a0338f141ef32299d48f1415486f47953d37b0c7fa6d778b73b66f3a7e2"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7be4efe60e9bddf78ee165a296e80170147282081e1366f0580cf4cc0fb1182f"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66e83a9a1131f0060aaedcc57f1a7e489898b6c3607eededccc7a9f80b95bdb4"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a7986fb988314fd2225c1ecab45fd457e1f2c097dcc3c0aacd2a7aec7486beb6"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34c30e1461da3a69c5bdcfce44418b6f969e1e68ebf367edfa5eaab380abf7a"}, + {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cb4c676ab99ca2dd231928d481e19cd540155dff36e70e613179c4927bd520b8"}, + {file = "aiohttp-3.11.4-cp312-cp312-win32.whl", hash = "sha256:d40d9a740053cb7fef72442fa7bd699060ff4c710971ebdb8dd7c8b36417570f"}, + {file = "aiohttp-3.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:365df6cf2ad144479ba0e0b58abdc5276923676d34da4c1c45613a80d2aac130"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f307632f3eaa676f8c2f5df11e4c00ad47dfa79b06cb2fa39156a4e9c6821bdb"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc2d64b1747efa183ced57b6bce53c9ea8e16e53419e389051b2a214ad0ed051"}, + {file = "aiohttp-3.11.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f37ece590451ecffc815f2eb41f07191d1a31a0404361d1ae2ed532e05c86da4"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b10b316413c80a4dcc5228c092a8d019e4b75d4efbca8988cb5b67ae9fa56881"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beaed1b2d03033dd301a7b67430f03c8255d6856a269c20995a0292de596519e"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:518578d6821c942362daa14a56f26b739abeede6e408b0b83e27dfcde17730f7"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e09bc44a1abbd96f55d15330d6cab80459cb8b06a0b656efd712ce47a3710d"}, + {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae8480148d696dae49126e97568333fc01493069ad46a94b82f69c7a33197ea"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b71aab89800fa2eaeb28923ee05e7e56c28dab4ebdba524db06e963431bf6192"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:821c9c640d3dc456c6a7b005e38bc5af05326b6a08ce91a068719934d108a1bb"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d60255f3ed71aa14a2e75383543ca31bd362fdc7f0d2eafc060d85a9051598df"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9788781f57fb732426ae74b9955b899e677ce42b848e60a11be29358fb20c976"}, + {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94acecf2eee13a45f627ed25a28f5a7f2db66b90ff94cd7a1e9cc1ad32cddd43"}, + {file = "aiohttp-3.11.4-cp313-cp313-win32.whl", hash = "sha256:d0fd6510c6d67d08ec80d9ba10cd340a8cfb0dd33436c858ed38d4564abb27c7"}, + {file = "aiohttp-3.11.4-cp313-cp313-win_amd64.whl", hash = "sha256:474f7266a61d1c3218ef4ec0325747884b2d5a13fab5bff5dd3b55d9c849406a"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfe8646a24856624c1eb7649da99333f0d7e75d9cf7c155ea870957d24b7c63c"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e69d9869df50dd591228c62fbb3923d6124517d6bfc47a804492813888b497be"}, + {file = "aiohttp-3.11.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb4f1fe110332651c00d2df160978cf1be70896ed9e612ff7c7e67955091b2c4"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d97668595bf03299148ea968fed2195cc76ad063aeec8161731aa6a5dbc2f675"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0b3378dc294ad6ec6c038ed57164165e0b83ef5f61eee72f6eefccd7df34b8"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0898a77298dc24eef368511d98e551e0b2db293fa9b40c982f4d5ab4d8d2a3a"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ecdf43ddde709c336a655c8b3858c56af8f7402de2572001a5a99f7bebf2f78"}, + {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bf9c139dfa004b65d2d71906abc593dcafe78a508f33d56c1ca9d87b18337f"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2d978a95e4b58ef1fd937fbe347ab397c79ba24e17912595b54faafb88b9b937"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e32517c01905e0f4e665c3f3a495868ad996a32c243fcd917587d740253d589"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4275160583df18158e0d6789797ad314a14ae611b98933fbe7d7a1c3dcc6bad4"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1ff7afc3c461bd9217e2b8a90ddbe5edd94687d5a331c4ae6166dca5876d1a4b"}, + {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:83bd5aa621b732a0ca1aa3490abd2b010247c4677371a804431935aeedf26e74"}, + {file = "aiohttp-3.11.4-cp39-cp39-win32.whl", hash = "sha256:542a4610571b0affc6e13dda9357235f5f1f2ad9859acc69b188eb53901292d6"}, + {file = "aiohttp-3.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:a468b1b9d5499cbfd0411f5d28adbe651c90508540fdaefb4b7a2171a837a88d"}, + {file = "aiohttp-3.11.4.tar.gz", hash = "sha256:9d95cce8bb010597b3f2217155befe4708e0538d3548aa08d640ebf54e3f57cb"}, ] [package.dependencies] @@ -1031,6 +1031,17 @@ django = ["dj-database-url", "dj-email-url", "django-cache-url"] lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] +[[package]] +name = "et-xmlfile" +version = "2.0.0" +description = "An implementation of lxml.xmlfile for the standard library" +optional = false +python-versions = ">=3.8" +files = [ + {file = "et_xmlfile-2.0.0-py3-none-any.whl", hash = "sha256:7a91720bc756843502c3b7504c77b8fe44217c85c537d85037f0f536151b2caa"}, + {file = "et_xmlfile-2.0.0.tar.gz", hash = "sha256:dab3f4764309081ce75662649be815c4c9081e88f0837825f90fd28317d4da54"}, +] + [[package]] name = "exceptiongroup" version = "1.2.2" @@ -3561,6 +3572,20 @@ numpy = [ {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] +[[package]] +name = "openpyxl" +version = "3.1.5" +description = "A Python library to read/write Excel 2010 xlsx/xlsm files" +optional = false +python-versions = ">=3.8" +files = [ + {file = "openpyxl-3.1.5-py2.py3-none-any.whl", hash = "sha256:5282c12b107bffeef825f4617dc029afaf41d0ea60823bbb665ef3079dc79de2"}, + {file = "openpyxl-3.1.5.tar.gz", hash = "sha256:cf0e3cf56142039133628b5acffe8ef0c12bc902d2aadd3e0fe5878dc08d1050"}, +] + +[package.dependencies] +et-xmlfile = "*" + [[package]] name = "orjson" version = "3.10.11" @@ -3663,43 +3688,31 @@ python-versions = ">=3.9" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, - {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, - {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, - {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, - {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, - {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, - {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, - {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, - {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, - {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, - {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, - {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, - {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, @@ -6457,13 +6470,13 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.2" +version = "4.46.3" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false python-versions = ">=3.8.0" files = [ - {file = "transformers-4.46.2-py3-none-any.whl", hash = "sha256:c921f4406b78e6518c97b618c5acd1cf8a4f2315b6b727f4bf9e01496eef849c"}, - {file = "transformers-4.46.2.tar.gz", hash = "sha256:3d85410881e1c074be767877bf33c83231ec11529f274a6044ecb20c157ba14e"}, + {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, + {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, ] [package.dependencies] @@ -6609,6 +6622,17 @@ rich = ">=10.11.0" shellingham = ">=1.3.0" typing-extensions = ">=3.7.4.3" +[[package]] +name = "types-openpyxl" +version = "3.1.5.20241114" +description = "Typing stubs for openpyxl" +optional = false +python-versions = ">=3.8" +files = [ + {file = "types-openpyxl-3.1.5.20241114.tar.gz", hash = "sha256:caeb9aafed8a5ffabdc74f880b148d90375364a1cfe7915d5065c5d79f3fe6a2"}, + {file = "types_openpyxl-3.1.5.20241114-py3-none-any.whl", hash = "sha256:f2925f595b08f5aef1baa725c9ee40baaf51beb05d98ac150593d3bdd37b1029"}, +] + [[package]] name = "types-pytz" version = "2024.2.0.20241003" @@ -7212,4 +7236,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "c7a2f4e30564c5bcd7ed96f203028f781a05ff2103698091616c8aff34ab3493" +content-hash = "1efd17010c7b811afb0c3a09b53d489cc6ac443b4edb6d6e5399b5d6b50d574d" diff --git a/pyproject.toml b/pyproject.toml index 088320e9..6a01764f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -47,6 +47,7 @@ python-pptx = "^1.0.2" beautifulsoup4 = "^4.12.3" pandas = "^2.1.4" marko = "^2.1.2" +openpyxl = "^3.1.5" [tool.poetry.group.dev.dependencies] black = {extras = ["jupyter"], version = "^24.4.2"} @@ -65,6 +66,7 @@ pandas-stubs = "^2.1.4.231227" ipykernel = "^6.29.5" ipywidgets = "^8.1.5" nbqa = "^1.9.0" +types-openpyxl = "^3.1.5.20241114" [tool.poetry.group.docs.dependencies] mkdocs-material = "^9.5.40" diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt b/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt new file mode 100644 index 00000000..cab5f63b --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.itxt @@ -0,0 +1,10 @@ +item-0 at level 0: unspecified: group _root_ + item-1 at level 1: section: group sheet: Sheet1 + item-2 at level 2: table with [7x3] + item-3 at level 1: section: group sheet: Sheet2 + item-4 at level 2: table with [9x4] + item-5 at level 2: table with [5x3] + item-6 at level 2: table with [5x3] + item-7 at level 1: section: group sheet: Sheet3 + item-8 at level 2: table with [7x3] + item-9 at level 2: table with [7x3] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.json b/tests/data/groundtruth/docling_v2/test-01.xlsx.json new file mode 100644 index 00000000..9a9e0d52 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.json @@ -0,0 +1,3240 @@ +{ + "schema_name": "DoclingDocument", + "version": "1.0.0", + "name": "test-01", + "origin": { + "mimetype": "application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", + "binary_hash": 9744611217659152490, + "filename": "test-01.xlsx" + }, + "furniture": { + "self_ref": "#/furniture", + "children": [], + "name": "_root_", + "label": "unspecified" + }, + "body": { + "self_ref": "#/body", + "children": [ + { + "$ref": "#/groups/0" + }, + { + "$ref": "#/groups/1" + }, + { + "$ref": "#/groups/2" + } + ], + "name": "_root_", + "label": "unspecified" + }, + "groups": [ + { + "self_ref": "#/groups/0", + "parent": { + "$ref": "#/body" + }, + "children": [ + { + "$ref": "#/tables/0" + } + ], + "name": "sheet: Sheet1", + "label": "section" + }, + { + "self_ref": "#/groups/1", + "parent": { + "$ref": "#/body" + }, + "children": [ + { + "$ref": "#/tables/1" + }, + { + "$ref": "#/tables/2" + }, + { + "$ref": "#/tables/3" + } + ], + "name": "sheet: Sheet2", + "label": "section" + }, + { + "self_ref": "#/groups/2", + "parent": { + "$ref": "#/body" + }, + "children": [ + { + "$ref": "#/tables/4" + }, + { + "$ref": "#/tables/5" + } + ], + "name": "sheet: Sheet3", + "label": "section" + } + ], + "texts": [], + "pictures": [], + "tables": [ + { + "self_ref": "#/tables/0", + "parent": { + "$ref": "#/groups/0" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "0", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "-3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "0", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "-6", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 7, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "0", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "-3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "0", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "-6", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + }, + { + "self_ref": "#/tables/1", + "parent": { + "$ref": "#/groups/1" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "col-4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "16", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "15", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "20", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "18", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "24", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "14", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "21", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "28", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "16", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "24", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "32", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 9, + "num_cols": 4, + "grid": [ + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "col-4", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "16", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "15", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "20", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "18", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "24", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "14", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "21", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 7, + "end_row_offset_idx": 8, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "28", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "16", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "24", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 8, + "end_row_offset_idx": 9, + "start_col_offset_idx": 3, + "end_col_offset_idx": 4, + "text": "32", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + }, + { + "self_ref": "#/tables/2", + "parent": { + "$ref": "#/groups/1" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 5, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + }, + { + "self_ref": "#/tables/3", + "parent": { + "$ref": "#/groups/1" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 5, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "col-1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "col-2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "col-3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "12", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + }, + { + "self_ref": "#/tables/4", + "parent": { + "$ref": "#/groups/2" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 7, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + }, + { + "self_ref": "#/tables/5", + "parent": { + "$ref": "#/groups/2" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first (f)", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header (f)", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 7, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first (f)", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header (f)", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 2, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "header (f)", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "first (f)", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "second ", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "third", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "4", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 4, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "5", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 2, + "col_span": 1, + "start_row_offset_idx": 3, + "end_row_offset_idx": 5, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "6", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 4, + "end_row_offset_idx": 5, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "7", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 5, + "end_row_offset_idx": 6, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "8", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 6, + "end_row_offset_idx": 7, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "10", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 2, + "col_span": 2, + "start_row_offset_idx": 5, + "end_row_offset_idx": 7, + "start_col_offset_idx": 1, + "end_col_offset_idx": 3, + "text": "9", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + } + ], + "key_value_items": [], + "pages": {} +} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test-01.xlsx.md b/tests/data/groundtruth/docling_v2/test-01.xlsx.md new file mode 100644 index 00000000..4a059c60 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test-01.xlsx.md @@ -0,0 +1,51 @@ +| first | second | third | +|----------|-----------|---------| +| 1 | 5 | 9 | +| 2 | 4 | 6 | +| 3 | 3 | 3 | +| 4 | 2 | 0 | +| 5 | 1 | -3 | +| 6 | 0 | -6 | + +| col-1 | col-2 | col-3 | col-4 | +|---------|---------|---------|---------| +| 1 | 2 | 3 | 4 | +| 2 | 4 | 6 | 8 | +| 3 | 6 | 9 | 12 | +| 4 | 8 | 12 | 16 | +| 5 | 10 | 15 | 20 | +| 6 | 12 | 18 | 24 | +| 7 | 14 | 21 | 28 | +| 8 | 16 | 24 | 32 | + +| col-1 | col-2 | col-3 | +|---------|---------|---------| +| 1 | 2 | 3 | +| 2 | 4 | 6 | +| 3 | 6 | 9 | +| 4 | 8 | 12 | + +| col-1 | col-2 | col-3 | +|---------|---------|---------| +| 1 | 2 | 3 | +| 2 | 4 | 6 | +| 3 | 6 | 9 | +| 4 | 8 | 12 | + +| first | header | header | +|----------|----------|----------| +| first | second | third | +| 1 | 2 | 3 | +| 3 | 4 | 5 | +| 3 | 6 | 7 | +| 8 | 9 | 9 | +| 10 | 9 | 9 | + +| first (f) | header (f) | header (f) | +|-------------|--------------|--------------| +| first (f) | second | third | +| 1 | 2 | 3 | +| 3 | 4 | 5 | +| 3 | 6 | 7 | +| 8 | 9 | 9 | +| 10 | 9 | 9 | \ No newline at end of file diff --git a/tests/data/xlsx/test-01.xlsx b/tests/data/xlsx/test-01.xlsx new file mode 100644 index 0000000000000000000000000000000000000000..ab75b72d56c5315d33acd8aee12113609c1120cd GIT binary patch literal 21387 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 literal 0 HcmV?d00001 diff --git a/tests/test_backend_msexcel.py b/tests/test_backend_msexcel.py new file mode 100644 index 00000000..d13959ed --- /dev/null +++ b/tests/test_backend_msexcel.py @@ -0,0 +1,77 @@ +import json +import os +from pathlib import Path + +from docling.backend.msword_backend import MsWordDocumentBackend +from docling.datamodel.base_models import InputFormat +from docling.datamodel.document import ( + ConversionResult, + InputDocument, + SectionHeaderItem, +) +from docling.document_converter import DocumentConverter + +GENERATE = False + + +def get_xlsx_paths(): + + # Define the directory you want to search + directory = Path("./tests/data/xlsx/") + + # List all PDF files in the directory and its subdirectories + pdf_files = sorted(directory.rglob("*.xlsx")) + return pdf_files + + +def get_converter(): + + converter = DocumentConverter(allowed_formats=[InputFormat.XLSX]) + + return converter + + +def verify_export(pred_text: str, gtfile: str): + + if not os.path.exists(gtfile) or GENERATE: + with open(gtfile, "w") as fw: + fw.write(pred_text) + + return True + + else: + with open(gtfile, "r") as fr: + true_text = fr.read() + + assert pred_text == true_text, "pred_itxt==true_itxt" + return pred_text == true_text + + +def test_e2e_xlsx_conversions(): + + xlsx_paths = get_xlsx_paths() + converter = get_converter() + + for xlsx_path in xlsx_paths: + # print(f"converting {xlsx_path}") + + gt_path = ( + xlsx_path.parent.parent / "groundtruth" / "docling_v2" / xlsx_path.name + ) + + conv_result: ConversionResult = converter.convert(xlsx_path) + + doc: DoclingDocument = conv_result.document + + pred_md: str = doc.export_to_markdown() + assert verify_export(pred_md, str(gt_path) + ".md"), "export to md" + + pred_itxt: str = doc._export_to_indented_text( + max_text_len=70, explicit_tables=False + ) + assert verify_export( + pred_itxt, str(gt_path) + ".itxt" + ), "export to indented-text" + + pred_json: str = json.dumps(doc.export_to_dict(), indent=2) + assert verify_export(pred_json, str(gt_path) + ".json"), "export to json" From ed785ea122d8d736c2031a38fce81dc5c19e244c Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Tue, 19 Nov 2024 15:58:49 +0100 Subject: [PATCH 03/40] feat: expose ocr-lang in CLI (#375) * feat: expose ocr-lang in CLI Signed-off-by: Michele Dolfi * use regex for supporting multiple sep Signed-off-by: Michele Dolfi --------- Signed-off-by: Michele Dolfi --- docling/cli/main.py | 18 ++++++++++++++++++ docling/datamodel/pipeline_options.py | 1 + 2 files changed, 19 insertions(+) diff --git a/docling/cli/main.py b/docling/cli/main.py index c95128ac..a2a86bf4 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -1,6 +1,7 @@ import importlib import json import logging +import re import time import warnings from enum import Enum @@ -129,6 +130,12 @@ def export_documents( ) +def _split_list(raw: Optional[str]) -> Optional[List[str]]: + if raw is None: + return None + return re.split(r"[;,]", raw) + + @app.command(no_args_is_help=True) def convert( input_sources: Annotated[ @@ -163,6 +170,13 @@ def convert( ocr_engine: Annotated[ OcrEngine, typer.Option(..., help="The OCR engine to use.") ] = OcrEngine.EASYOCR, + ocr_lang: Annotated[ + Optional[str], + typer.Option( + ..., + help="Provide a comma-separated list of languages used by the OCR engine. Note that each OCR engine has different values for the language names.", + ), + ] = None, pdf_backend: Annotated[ PdfBackend, typer.Option(..., help="The PDF backend to use.") ] = PdfBackend.DLPARSE_V1, @@ -248,6 +262,10 @@ def convert( case _: raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") + ocr_lang_list = _split_list(ocr_lang) + if ocr_lang_list is not None: + ocr_options.lang = ocr_lang_list + pipeline_options = PdfPipelineOptions( do_ocr=ocr, ocr_options=ocr_options, diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 2b9d228c..6c0711cc 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -22,6 +22,7 @@ class TableStructureOptions(BaseModel): class OcrOptions(BaseModel): kind: str + lang: List[str] force_full_page_ocr: bool = False # If enabled a full page OCR is always applied bitmap_area_threshold: float = ( 0.05 # percentage of the area for a bitmap to processed with OCR From 911c3bda27c4108167b89fa70ec8204c854c583b Mon Sep 17 00:00:00 2001 From: Gaspard Petit Date: Tue, 19 Nov 2024 10:27:19 -0500 Subject: [PATCH 04/40] docs: fixed typo in v2 example v2 (#378) Update v2.md - fixed typo in example: iterate_items -> iterate_items() Signed-off-by: Gaspard Petit --- docs/v2.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/v2.md b/docs/v2.md index 1c6ee6d9..5ccb0cdf 100644 --- a/docs/v2.md +++ b/docs/v2.md @@ -152,7 +152,7 @@ conv_result: ConversionResult = doc_converter.convert("https://arxiv.org/pdf/240 conv_result.document.print_element_tree() ## Iterate the elements in reading order, including hierachy level: -for item, level in conv_result.document.iterate_items: +for item, level in conv_result.document.iterate_items(): if isinstance(item, TextItem): print(item.text) elif isinstance(item, TableItem): From 3f91e7d3f166901c139ab036c4d9dad5fa560aa9 Mon Sep 17 00:00:00 2001 From: Shubham Gupta <26436285+sh-gupta@users.noreply.github.com> Date: Tue, 19 Nov 2024 16:28:52 +0100 Subject: [PATCH 05/40] feat: added support for exporting DocItem to an image when page image is available (#379) * Updated minimum docling-core version to 2.4.0 Signed-off-by: Shubham Gupta <26436285+sh-gupta@users.noreply.github.com> * Deprecated the generate_table_images option Signed-off-by: Shubham Gupta <26436285+sh-gupta@users.noreply.github.com> * Updated examples to use get_image instead of element.image Signed-off-by: Shubham Gupta <26436285+sh-gupta@users.noreply.github.com> --------- Signed-off-by: Shubham Gupta <26436285+sh-gupta@users.noreply.github.com> --- docling/datamodel/pipeline_options.py | 9 ++++++++- docs/examples/develop_picture_enrichment.py | 2 +- docs/examples/export_figures.py | 5 ++--- poetry.lock | 21 +++++++++++++++++++-- pyproject.toml | 2 +- 5 files changed, 31 insertions(+), 8 deletions(-) diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 6c0711cc..1ea4d62a 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -82,4 +82,11 @@ class PdfPipelineOptions(PipelineOptions): images_scale: float = 1.0 generate_page_images: bool = False generate_picture_images: bool = False - generate_table_images: bool = False + generate_table_images: bool = Field( + default=False, + deprecated=( + "Field `generate_table_images` is deprecated. " + "To obtain table images, set `PdfPipelineOptions.generate_page_images = True` " + "before conversion and then use the `TableItem.get_image` function." + ), + ) diff --git a/docs/examples/develop_picture_enrichment.py b/docs/examples/develop_picture_enrichment.py index 9e2cfb8a..7ad06e4a 100644 --- a/docs/examples/develop_picture_enrichment.py +++ b/docs/examples/develop_picture_enrichment.py @@ -39,7 +39,7 @@ class ExamplePictureClassifierEnrichmentModel(BaseEnrichmentModel): assert isinstance(element, PictureItem) # uncomment this to interactively visualize the image - # element.image.pil_image.show() + # element.get_image(doc).show() element.annotations.append( PictureClassificationData( diff --git a/docs/examples/export_figures.py b/docs/examples/export_figures.py index 3f0bfa84..f910753d 100644 --- a/docs/examples/export_figures.py +++ b/docs/examples/export_figures.py @@ -28,7 +28,6 @@ def main(): pipeline_options = PdfPipelineOptions() pipeline_options.images_scale = IMAGE_RESOLUTION_SCALE pipeline_options.generate_page_images = True - pipeline_options.generate_table_images = True pipeline_options.generate_picture_images = True doc_converter = DocumentConverter( @@ -61,7 +60,7 @@ def main(): output_dir / f"{doc_filename}-table-{table_counter}.png" ) with element_image_filename.open("wb") as fp: - element.image.pil_image.save(fp, "PNG") + element.get_image(conv_res.document).save(fp, "PNG") if isinstance(element, PictureItem): picture_counter += 1 @@ -69,7 +68,7 @@ def main(): output_dir / f"{doc_filename}-picture-{picture_counter}.png" ) with element_image_filename.open("wb") as fp: - element.image.pil_image.save(fp, "PNG") + element.get_image(conv_res.document).save(fp, "PNG") # Save markdown with embedded pictures content_md = conv_res.document.export_to_markdown(image_mode=ImageRefMode.EMBEDDED) diff --git a/poetry.lock b/poetry.lock index 439f9136..f0717c43 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1,4 +1,4 @@ -# This file is automatically @generated by Poetry 1.8.3 and should not be changed by hand. +# This file is automatically @generated by Poetry 1.8.4 and should not be changed by hand. [[package]] name = "aiohappyeyeballs" @@ -3688,31 +3688,43 @@ python-versions = ">=3.9" files = [ {file = "pandas-2.2.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:1948ddde24197a0f7add2bdc4ca83bf2b1ef84a1bc8ccffd95eda17fd836ecb5"}, {file = "pandas-2.2.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:381175499d3802cde0eabbaf6324cce0c4f5d52ca6f8c377c29ad442f50f6348"}, + {file = "pandas-2.2.3-cp310-cp310-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:d9c45366def9a3dd85a6454c0e7908f2b3b8e9c138f5dc38fed7ce720d8453ed"}, {file = "pandas-2.2.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:86976a1c5b25ae3f8ccae3a5306e443569ee3c3faf444dfd0f41cda24667ad57"}, + {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:b8661b0238a69d7aafe156b7fa86c44b881387509653fdf857bebc5e4008ad42"}, {file = "pandas-2.2.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:37e0aced3e8f539eccf2e099f65cdb9c8aa85109b0be6e93e2baff94264bdc6f"}, {file = "pandas-2.2.3-cp310-cp310-win_amd64.whl", hash = "sha256:56534ce0746a58afaf7942ba4863e0ef81c9c50d3f0ae93e9497d6a41a057645"}, {file = "pandas-2.2.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:66108071e1b935240e74525006034333f98bcdb87ea116de573a6a0dccb6c039"}, {file = "pandas-2.2.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:7c2875855b0ff77b2a64a0365e24455d9990730d6431b9e0ee18ad8acee13dbd"}, + {file = "pandas-2.2.3-cp311-cp311-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cd8d0c3be0515c12fed0bdbae072551c8b54b7192c7b1fda0ba56059a0179698"}, {file = "pandas-2.2.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c124333816c3a9b03fbeef3a9f230ba9a737e9e5bb4060aa2107a86cc0a497fc"}, + {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:63cc132e40a2e084cf01adf0775b15ac515ba905d7dcca47e9a251819c575ef3"}, {file = "pandas-2.2.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:29401dbfa9ad77319367d36940cd8a0b3a11aba16063e39632d98b0e931ddf32"}, {file = "pandas-2.2.3-cp311-cp311-win_amd64.whl", hash = "sha256:3fc6873a41186404dad67245896a6e440baacc92f5b716ccd1bc9ed2995ab2c5"}, {file = "pandas-2.2.3-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b1d432e8d08679a40e2a6d8b2f9770a5c21793a6f9f47fdd52c5ce1948a5a8a9"}, {file = "pandas-2.2.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:a5a1595fe639f5988ba6a8e5bc9649af3baf26df3998a0abe56c02609392e0a4"}, + {file = "pandas-2.2.3-cp312-cp312-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:5de54125a92bb4d1c051c0659e6fcb75256bf799a732a87184e5ea503965bce3"}, {file = "pandas-2.2.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fffb8ae78d8af97f849404f21411c95062db1496aeb3e56f146f0355c9989319"}, + {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6dfcb5ee8d4d50c06a51c2fffa6cff6272098ad6540aed1a76d15fb9318194d8"}, {file = "pandas-2.2.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:062309c1b9ea12a50e8ce661145c6aab431b1e99530d3cd60640e255778bd43a"}, {file = "pandas-2.2.3-cp312-cp312-win_amd64.whl", hash = "sha256:59ef3764d0fe818125a5097d2ae867ca3fa64df032331b7e0917cf5d7bf66b13"}, {file = "pandas-2.2.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f00d1345d84d8c86a63e476bb4955e46458b304b9575dcf71102b5c705320015"}, {file = "pandas-2.2.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:3508d914817e153ad359d7e069d752cdd736a247c322d932eb89e6bc84217f28"}, + {file = "pandas-2.2.3-cp313-cp313-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:22a9d949bfc9a502d320aa04e5d02feab689d61da4e7764b62c30b991c42c5f0"}, {file = "pandas-2.2.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3a255b2c19987fbbe62a9dfd6cff7ff2aa9ccab3fc75218fd4b7530f01efa24"}, + {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:800250ecdadb6d9c78eae4990da62743b857b470883fa27f652db8bdde7f6659"}, {file = "pandas-2.2.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:6374c452ff3ec675a8f46fd9ab25c4ad0ba590b71cf0656f8b6daa5202bca3fb"}, {file = "pandas-2.2.3-cp313-cp313-win_amd64.whl", hash = "sha256:61c5ad4043f791b61dd4752191d9f07f0ae412515d59ba8f005832a532f8736d"}, {file = "pandas-2.2.3-cp313-cp313t-macosx_10_13_x86_64.whl", hash = "sha256:3b71f27954685ee685317063bf13c7709a7ba74fc996b84fc6821c59b0f06468"}, {file = "pandas-2.2.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:38cf8125c40dae9d5acc10fa66af8ea6fdf760b2714ee482ca691fc66e6fcb18"}, + {file = "pandas-2.2.3-cp313-cp313t-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:ba96630bc17c875161df3818780af30e43be9b166ce51c9a18c1feae342906c2"}, {file = "pandas-2.2.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1db71525a1538b30142094edb9adc10be3f3e176748cd7acc2240c2f2e5aa3a4"}, + {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:15c0e1e02e93116177d29ff83e8b1619c93ddc9c49083f237d4312337a61165d"}, {file = "pandas-2.2.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:ad5b65698ab28ed8d7f18790a0dc58005c7629f227be9ecc1072aa74c0c1d43a"}, {file = "pandas-2.2.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:bc6b93f9b966093cb0fd62ff1a7e4c09e6d546ad7c1de191767baffc57628f39"}, {file = "pandas-2.2.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:5dbca4c1acd72e8eeef4753eeca07de9b1db4f398669d5994086f788a5d7cc30"}, + {file = "pandas-2.2.3-cp39-cp39-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:8cd6d7cc958a3910f934ea8dbdf17b2364827bb4dafc38ce6eef6bb3d65ff09c"}, {file = "pandas-2.2.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:99df71520d25fade9db7c1076ac94eb994f4d2673ef2aa2e86ee039b6746d20c"}, + {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31d0ced62d4ea3e231a9f228366919a5ea0b07440d9d4dac345376fd8e1477ea"}, {file = "pandas-2.2.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7eee9e7cea6adf3e3d24e304ac6b8300646e2a5d1cd3a3c2abed9101b0846761"}, {file = "pandas-2.2.3-cp39-cp39-win_amd64.whl", hash = "sha256:4850ba03528b6dd51d6c5d273c46f183f39a9baf3f0143e566b89450965b105e"}, {file = "pandas-2.2.3.tar.gz", hash = "sha256:4f18ba62b61d7e192368b84517265a99b4d7ee8912f8708660fb4a366cc82667"}, @@ -5637,6 +5649,11 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, + {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -7236,4 +7253,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "1efd17010c7b811afb0c3a09b53d489cc6ac443b4edb6d6e5399b5d6b50d574d" +content-hash = "a0f599090cfd9414c0e90fd611fd0b23166a45cd925904491eb0503a6f6bd1d8" diff --git a/pyproject.toml b/pyproject.toml index 6a01764f..3bc087f2 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [{include = "docling"}] ###################### python = "^3.10" pydantic = "^2.0.0" -docling-core = "^2.3.0" +docling-core = "^2.4.0" docling-ibm-models = "^2.0.3" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" From 2cfaceb78742ee35e2ca5b7b52d45d45e2e19fbb Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 19 Nov 2024 16:07:34 +0000 Subject: [PATCH 06/40] chore: bump version to 2.6.0 [skip ci] --- CHANGELOG.md | 21 +++++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index eda924de..fafb1ad5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,24 @@ +## [v2.6.0](https://github.com/DS4SD/docling/releases/tag/v2.6.0) - 2024-11-19 + +### Feature + +* Added support for exporting DocItem to an image when page image is available ([#379](https://github.com/DS4SD/docling/issues/379)) ([`3f91e7d`](https://github.com/DS4SD/docling/commit/3f91e7d3f166901c139ab036c4d9dad5fa560aa9)) +* Expose ocr-lang in CLI ([#375](https://github.com/DS4SD/docling/issues/375)) ([`ed785ea`](https://github.com/DS4SD/docling/commit/ed785ea122d8d736c2031a38fce81dc5c19e244c)) +* Added excel backend ([#334](https://github.com/DS4SD/docling/issues/334)) ([`926dfd2`](https://github.com/DS4SD/docling/commit/926dfd29d51c52628fe9fe8acb0ad0121c88e58a)) +* Extracting picture data for raster images found in PPTX ([#349](https://github.com/DS4SD/docling/issues/349)) ([`7a97d71`](https://github.com/DS4SD/docling/commit/7a97d7119f69a83042477d4272e8ef93a2252cc8)) + +### Fix + +* Fixing images in the input Word files ([#330](https://github.com/DS4SD/docling/issues/330)) ([`8533039`](https://github.com/DS4SD/docling/commit/8533039b0c0eff131b524da765f15c3279b554c5)) +* Reduce logging by keeping option for more verbose ([#323](https://github.com/DS4SD/docling/issues/323)) ([`8b437ad`](https://github.com/DS4SD/docling/commit/8b437adcde4acc1d309c81c707c264bcca05d394)) + +### Documentation + +* Fixed typo in v2 example v2 ([#378](https://github.com/DS4SD/docling/issues/378)) ([`911c3bd`](https://github.com/DS4SD/docling/commit/911c3bda27c4108167b89fa70ec8204c854c583b)) +* Add automatic generation of CLI reference ([#325](https://github.com/DS4SD/docling/issues/325)) ([`ca8524e`](https://github.com/DS4SD/docling/commit/ca8524ecaea93cca0c808c8e7dee29fda0c1977e)) +* Add architecture outline ([#341](https://github.com/DS4SD/docling/issues/341)) ([`25fd149`](https://github.com/DS4SD/docling/commit/25fd149c3839343f8bd42ae993e35f80acda2a52)) +* Fix parameter in usage.md ([#332](https://github.com/DS4SD/docling/issues/332)) ([`835e077`](https://github.com/DS4SD/docling/commit/835e077b021d0a3615247906dd82ecfa19f3cf98)) + ## [v2.5.2](https://github.com/DS4SD/docling/releases/tag/v2.5.2) - 2024-11-13 ### Fix diff --git a/pyproject.toml b/pyproject.toml index 3bc087f2..abca5314 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.5.2" # DO NOT EDIT, updated automatically +version = "2.6.0" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 32ebf55e3338dd22f9a23c55595f15835794d961 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Wed, 20 Nov 2024 08:36:51 +0100 Subject: [PATCH 07/40] fix: propagate document limits to converter (#388) Signed-off-by: Michele Dolfi --- docling/document_converter.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docling/document_converter.py b/docling/document_converter.py index 4e436d07..9304fb11 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -183,7 +183,7 @@ class DocumentConverter: ) conv_input = _DocumentConversionInput( path_or_stream_iterator=source, - limit=limits, + limits=limits, ) conv_res_iter = self._convert(conv_input, raises_on_error=raises_on_error) for conv_res in conv_res_iter: From 6efa96c983fc509b2c7b35a4a25a714284f2f782 Mon Sep 17 00:00:00 2001 From: nuridol Date: Wed, 20 Nov 2024 20:51:19 +0900 Subject: [PATCH 08/40] feat: add support for `ocrmac` OCR engine on macOS (#276) * feat: add support for `ocrmac` OCR engine on macOS - Integrates `ocrmac` as an OCR engine option for macOS users. - Adds configuration options and dependencies for `ocrmac`. - Updates documentation to reflect new engine support. This change allows macOS users to utilize `ocrmac` for improved OCR performance and compatibility. Signed-off-by: Suhwan Seo * updated the poetry lock Signed-off-by: Suhwan Seo * Fix linting issues, update CLI docs, and add error for ocrmac use on non-Mac systems - Resolved formatting and linting issues - Updated `--ocr-engine` CLI option documentation for `ocrmac` - Added RuntimeError for attempts to use `ocrmac` on non-Mac platforms Signed-off-by: Suhwan Seo * feat: add support for `ocrmac` OCR engine on macOS - Integrates `ocrmac` as an OCR engine option for macOS users. - Adds configuration options and dependencies for `ocrmac`. - Updates documentation to reflect new engine support. This change allows macOS users to utilize `ocrmac` for improved OCR performance and compatibility. Signed-off-by: Suhwan Seo * docs: update examples and installation for ocrmac support - Added `OcrMacOptions` to `custom_convert.py` and `full_page_ocr.py` examples. - Included usage comments and examples for `OcrMacOptions` in OCR pipelines. - Updated installation guide to include instructions for installing `ocrmac`, noting macOS version requirements (10.15+). - Highlighted that `ocrmac` leverages Apple's Vision framework as an OCR backend. This enhances documentation for users working on macOS to leverage `ocrmac` effectively. Signed-off-by: Suhwan Seo * fix: update `ocrmac` dependency with macOS-specific marker - Added `sys_platform == 'darwin'` marker to the `ocrmac` dependency in `pyproject.toml` to specify macOS compatibility. - Updated the content hash in `poetry.lock` to reflect the changes. This ensures the `ocrmac` dependency is only installed on macOS systems. Signed-off-by: Suhwan Seo --------- Signed-off-by: Suhwan Seo Co-authored-by: Suhwan Seo --- docling/cli/main.py | 4 + docling/datamodel/pipeline_options.py | 17 ++- docling/models/ocr_mac_model.py | 118 +++++++++++++++++++ docling/pipeline/standard_pdf_pipeline.py | 12 ++ docs/examples/custom_convert.py | 15 +++ docs/examples/full_page_ocr.py | 4 +- docs/installation.md | 12 ++ poetry.lock | 133 ++++++++++++++++++++-- pyproject.toml | 3 + tests/test_e2e_ocr_conversion.py | 7 ++ 10 files changed, 311 insertions(+), 14 deletions(-) create mode 100644 docling/models/ocr_mac_model.py diff --git a/docling/cli/main.py b/docling/cli/main.py index a2a86bf4..8e0d23c1 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -24,6 +24,7 @@ from docling.datamodel.base_models import ( from docling.datamodel.document import ConversionResult from docling.datamodel.pipeline_options import ( EasyOcrOptions, + OcrMacOptions, OcrOptions, PdfPipelineOptions, TableFormerMode, @@ -74,6 +75,7 @@ class OcrEngine(str, Enum): EASYOCR = "easyocr" TESSERACT_CLI = "tesseract_cli" TESSERACT = "tesseract" + OCRMAC = "ocrmac" def export_documents( @@ -259,6 +261,8 @@ def convert( ocr_options = TesseractCliOcrOptions(force_full_page_ocr=force_ocr) case OcrEngine.TESSERACT: ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) + case OcrEngine.OCRMAC: + ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) case _: raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 1ea4d62a..b691215c 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -63,6 +63,17 @@ class TesseractOcrOptions(OcrOptions): ) +class OcrMacOptions(OcrOptions): + kind: Literal["ocrmac"] = "ocrmac" + lang: List[str] = ["fr-FR", "de-DE", "es-ES", "en-US"] + recognition: str = "accurate" + framework: str = "vision" + + model_config = ConfigDict( + extra="forbid", + ) + + class PipelineOptions(BaseModel): create_legacy_output: bool = ( True # This defautl will be set to False on a future version of docling @@ -75,9 +86,9 @@ class PdfPipelineOptions(PipelineOptions): do_ocr: bool = True # True: perform OCR, replace programmatic PDF text table_structure_options: TableStructureOptions = TableStructureOptions() - ocr_options: Union[EasyOcrOptions, TesseractCliOcrOptions, TesseractOcrOptions] = ( - Field(EasyOcrOptions(), discriminator="kind") - ) + ocr_options: Union[ + EasyOcrOptions, TesseractCliOcrOptions, TesseractOcrOptions, OcrMacOptions + ] = Field(EasyOcrOptions(), discriminator="kind") images_scale: float = 1.0 generate_page_images: bool = False diff --git a/docling/models/ocr_mac_model.py b/docling/models/ocr_mac_model.py new file mode 100644 index 00000000..38bcf1ca --- /dev/null +++ b/docling/models/ocr_mac_model.py @@ -0,0 +1,118 @@ +import logging +import tempfile +from typing import Iterable, Optional, Tuple + +from docling_core.types.doc import BoundingBox, CoordOrigin + +from docling.datamodel.base_models import OcrCell, Page +from docling.datamodel.document import ConversionResult +from docling.datamodel.pipeline_options import OcrMacOptions +from docling.datamodel.settings import settings +from docling.models.base_ocr_model import BaseOcrModel +from docling.utils.profiling import TimeRecorder + +_log = logging.getLogger(__name__) + + +class OcrMacModel(BaseOcrModel): + def __init__(self, enabled: bool, options: OcrMacOptions): + super().__init__(enabled=enabled, options=options) + self.options: OcrMacOptions + + self.scale = 3 # multiplier for 72 dpi == 216 dpi. + + if self.enabled: + install_errmsg = ( + "ocrmac is not correctly installed. " + "Please install it via `pip install ocrmac` to use this OCR engine. " + "Alternatively, Docling has support for other OCR engines. See the documentation: " + "https://ds4sd.github.io/docling/installation/" + ) + try: + from ocrmac import ocrmac + except ImportError: + raise ImportError(install_errmsg) + + self.reader_RIL = ocrmac.OCR + + def __call__( + self, conv_res: ConversionResult, page_batch: Iterable[Page] + ) -> Iterable[Page]: + + if not self.enabled: + yield from page_batch + return + + for page in page_batch: + assert page._backend is not None + if not page._backend.is_valid(): + yield page + else: + with TimeRecorder(conv_res, "ocr"): + + ocr_rects = self.get_ocr_rects(page) + + all_ocr_cells = [] + for ocr_rect in ocr_rects: + # Skip zero area boxes + if ocr_rect.area() == 0: + continue + high_res_image = page._backend.get_page_image( + scale=self.scale, cropbox=ocr_rect + ) + + with tempfile.NamedTemporaryFile( + suffix=".png", mode="w" + ) as image_file: + fname = image_file.name + high_res_image.save(fname) + + boxes = self.reader_RIL( + fname, + recognition_level=self.options.recognition, + framework=self.options.framework, + language_preference=self.options.lang, + ).recognize() + + im_width, im_height = high_res_image.size + cells = [] + for ix, (text, confidence, box) in enumerate(boxes): + x = float(box[0]) + y = float(box[1]) + w = float(box[2]) + h = float(box[3]) + + x1 = x * im_width + y2 = (1 - y) * im_height + + x2 = x1 + w * im_width + y1 = y2 - h * im_height + + left = x1 / self.scale + top = y1 / self.scale + right = x2 / self.scale + bottom = y2 / self.scale + + cells.append( + OcrCell( + id=ix, + text=text, + confidence=confidence, + bbox=BoundingBox.from_tuple( + coord=(left, top, right, bottom), + origin=CoordOrigin.TOPLEFT, + ), + ) + ) + + # del high_res_image + all_ocr_cells.extend(cells) + + # Post-process the cells + page.cells = self.post_process_cells(all_ocr_cells, page.cells) + + # DEBUG code: + if settings.debug.visualize_ocr: + self.draw_ocr_rects_and_cells(conv_res, page, ocr_rects) + + yield page diff --git a/docling/pipeline/standard_pdf_pipeline.py b/docling/pipeline/standard_pdf_pipeline.py index 65803d4f..63a7a89f 100644 --- a/docling/pipeline/standard_pdf_pipeline.py +++ b/docling/pipeline/standard_pdf_pipeline.py @@ -1,4 +1,5 @@ import logging +import sys from pathlib import Path from typing import Optional @@ -10,6 +11,7 @@ from docling.datamodel.base_models import AssembledUnit, Page from docling.datamodel.document import ConversionResult from docling.datamodel.pipeline_options import ( EasyOcrOptions, + OcrMacOptions, PdfPipelineOptions, TesseractCliOcrOptions, TesseractOcrOptions, @@ -18,6 +20,7 @@ from docling.models.base_ocr_model import BaseOcrModel from docling.models.ds_glm_model import GlmModel, GlmOptions from docling.models.easyocr_model import EasyOcrModel from docling.models.layout_model import LayoutModel +from docling.models.ocr_mac_model import OcrMacModel from docling.models.page_assemble_model import PageAssembleModel, PageAssembleOptions from docling.models.page_preprocessing_model import ( PagePreprocessingModel, @@ -118,6 +121,15 @@ class StandardPdfPipeline(PaginatedPipeline): enabled=self.pipeline_options.do_ocr, options=self.pipeline_options.ocr_options, ) + elif isinstance(self.pipeline_options.ocr_options, OcrMacOptions): + if "darwin" != sys.platform: + raise RuntimeError( + f"The specified OCR type is only supported on Mac: {self.pipeline_options.ocr_options.kind}." + ) + return OcrMacModel( + enabled=self.pipeline_options.do_ocr, + options=self.pipeline_options.ocr_options, + ) return None def initialize_page(self, conv_res: ConversionResult, page: Page) -> Page: diff --git a/docs/examples/custom_convert.py b/docs/examples/custom_convert.py index 7631848b..2d300904 100644 --- a/docs/examples/custom_convert.py +++ b/docs/examples/custom_convert.py @@ -7,6 +7,7 @@ from docling.backend.pypdfium2_backend import PyPdfiumDocumentBackend from docling.datamodel.base_models import InputFormat from docling.datamodel.pipeline_options import PdfPipelineOptions from docling.document_converter import DocumentConverter, PdfFormatOption +from docling.models.ocr_mac_model import OcrMacOptions from docling.models.tesseract_ocr_cli_model import TesseractCliOcrOptions from docling.models.tesseract_ocr_model import TesseractOcrOptions @@ -122,6 +123,20 @@ def main(): # } # ) + # Docling Parse with ocrmac(Mac only) + # ---------------------- + # pipeline_options = PdfPipelineOptions() + # pipeline_options.do_ocr = True + # pipeline_options.do_table_structure = True + # pipeline_options.table_structure_options.do_cell_matching = True + # pipeline_options.ocr_options = OcrMacOptions() + + # doc_converter = DocumentConverter( + # format_options={ + # InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options) + # } + # ) + ########################################################################### start_time = time.time() diff --git a/docs/examples/full_page_ocr.py b/docs/examples/full_page_ocr.py index 35c2ba6b..bbb7e122 100644 --- a/docs/examples/full_page_ocr.py +++ b/docs/examples/full_page_ocr.py @@ -4,6 +4,7 @@ from docling.backend.docling_parse_backend import DoclingParseDocumentBackend from docling.datamodel.base_models import InputFormat from docling.datamodel.pipeline_options import ( EasyOcrOptions, + OcrMacOptions, PdfPipelineOptions, TesseractCliOcrOptions, TesseractOcrOptions, @@ -19,9 +20,10 @@ def main(): pipeline_options.do_table_structure = True pipeline_options.table_structure_options.do_cell_matching = True - # Any of the OCR options can be used:EasyOcrOptions, TesseractOcrOptions, TesseractCliOcrOptions + # Any of the OCR options can be used:EasyOcrOptions, TesseractOcrOptions, TesseractCliOcrOptions, OcrMacOptions(Mac only) # ocr_options = EasyOcrOptions(force_full_page_ocr=True) # ocr_options = TesseractOcrOptions(force_full_page_ocr=True) + # ocr_options = OcrMacOptions(force_full_page_ocr=True) ocr_options = TesseractCliOcrOptions(force_full_page_ocr=True) pipeline_options.ocr_options = ocr_options diff --git a/docs/installation.md b/docs/installation.md index df18dece..addae382 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -30,6 +30,7 @@ Works on macOS, Linux, and Windows, with support for both x86_64 and arm64 archi | [EasyOCR](https://github.com/JaidedAI/EasyOCR) | Default in Docling or via `pip install easyocr`. | `EasyOcrOptions` | | Tesseract | System dependency. See description for Tesseract and Tesserocr below. | `TesseractOcrOptions` | | Tesseract CLI | System dependency. See description below. | `TesseractCliOcrOptions` | + | OcrMac | System dependency. See description below. | `OcrMacOptions` | The Docling `DocumentConverter` allows to choose the OCR engine with the `ocr_options` settings. For example @@ -91,6 +92,17 @@ Works on macOS, Linux, and Windows, with support for both x86_64 and arm64 archi pip install --no-binary :all: tesserocr ``` +

ocrmac installation

+ + [ocrmac](https://github.com/straussmaximilian/ocrmac) is using + Apple's vision(or livetext) framework as OCR backend. + For using this engine with Docling, ocrmac must be installed on your system. + This only works on macOS systems with newer macOS versions (10.15+). + + ```console + pip install ocrmac + ``` + ## Development setup To develop Docling features, bugfixes etc., install as follows from your local clone's root dir: diff --git a/poetry.lock b/poetry.lock index f0717c43..d8dd1c80 100644 --- a/poetry.lock +++ b/poetry.lock @@ -182,8 +182,8 @@ files = [ lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] [[package]] @@ -825,8 +825,8 @@ files = [ docling-core = ">=2.0,<3.0" docutils = "!=0.21" numpy = [ - {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, + {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, ] pandas = {version = ">=2.1.4,<3.0.0", markers = "python_version >= \"3.9\""} python-dotenv = ">=1.0.0,<2.0.0" @@ -912,8 +912,8 @@ huggingface_hub = ">=0.23,<1" jsonlines = ">=3.1.0,<4.0.0" mean_average_precision = ">=2021.4.26.0,<2022.0.0.0" numpy = [ - {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, + {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, ] opencv-python-headless = ">=4.6.0.66,<5.0.0.0" Pillow = ">=10.0.0,<11.0.0" @@ -2063,8 +2063,8 @@ jsonpatch = ">=1.33,<2.0" langsmith = ">=0.1.112,<0.2.0" packaging = ">=23.2,<25" pydantic = [ - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" @@ -2132,8 +2132,8 @@ files = [ httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = [ - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" @@ -3548,6 +3548,22 @@ files = [ {file = "nvidia_nvtx_cu12-12.4.127-py3-none-win_amd64.whl", hash = "sha256:641dccaaa1139f3ffb0d3164b4b84f9d253397e38246a4f2f36728b48566d485"}, ] +[[package]] +name = "ocrmac" +version = "1.0.0" +description = "A python wrapper to extract text from images on a mac system. Uses the vision framework from Apple." +optional = true +python-versions = ">=3.6" +files = [ + {file = "ocrmac-1.0.0-py2.py3-none-any.whl", hash = "sha256:0b5a072aa23a9ead48132cb2d595b680aa6c3c5a6cb69525155e35ca95610c3a"}, + {file = "ocrmac-1.0.0.tar.gz", hash = "sha256:5b299e9030c973d1f60f82db000d6c2e5ff271601878c7db0885e850597d1d2e"}, +] + +[package.dependencies] +Click = ">=7.0" +pillow = "*" +pyobjc-framework-Vision = "*" + [[package]] name = "opencv-python-headless" version = "4.10.0.84" @@ -3566,10 +3582,10 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] @@ -3732,9 +3748,9 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -4331,8 +4347,8 @@ files = [ annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, {version = ">=4.6.1", markers = "python_version < \"3.13\""}, + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, ] [package.extras] @@ -4500,8 +4516,8 @@ files = [ astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, ] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" @@ -4556,6 +4572,102 @@ bulk-writer = ["azure-storage-blob", "minio (>=7.0.0)", "pyarrow (>=12.0.0)", "r dev = ["black", "grpcio (==1.62.2)", "grpcio-testing (==1.62.2)", "grpcio-tools (==1.62.2)", "pytest (>=5.3.4)", "pytest-cov (>=2.8.1)", "pytest-timeout (>=1.3.4)", "ruff (>0.4.0)"] model = ["milvus-model (>=0.1.0)"] +[[package]] +name = "pyobjc-core" +version = "10.3.1" +description = "Python<->ObjC Interoperability Module" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyobjc_core-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ea46d2cda17921e417085ac6286d43ae448113158afcf39e0abe484c58fb3d78"}, + {file = "pyobjc_core-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:899d3c84d2933d292c808f385dc881a140cf08632907845043a333a9d7c899f9"}, + {file = "pyobjc_core-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6ff5823d13d0a534cdc17fa4ad47cf5bee4846ce0fd27fc40012e12b46db571b"}, + {file = "pyobjc_core-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2581e8e68885bcb0e11ec619e81ef28e08ee3fac4de20d8cc83bc5af5bcf4a90"}, + {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea98d4c2ec39ca29e62e0327db21418696161fb138ee6278daf2acbedf7ce504"}, + {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4c179c26ee2123d0aabffb9dbc60324b62b6f8614fb2c2328b09386ef59ef6d8"}, + {file = "pyobjc_core-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cb901fce65c9be420c40d8a6ee6fff5ff27c6945f44fd7191989b982baa66dea"}, + {file = "pyobjc_core-10.3.1.tar.gz", hash = "sha256:b204a80ccc070f9ab3f8af423a3a25a6fd787e228508d00c4c30f8ac538ba720"}, +] + +[[package]] +name = "pyobjc-framework-cocoa" +version = "10.3.1" +description = "Wrappers for the Cocoa frameworks on macOS" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Cocoa-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4cb4f8491ab4d9b59f5187e42383f819f7a46306a4fa25b84f126776305291d1"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5f31021f4f8fdf873b57a97ee1f3c1620dbe285e0b4eaed73dd0005eb72fd773"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11b4e0bad4bbb44a4edda128612f03cdeab38644bbf174de0c13129715497296"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:de5e62e5ccf2871a94acf3bf79646b20ea893cc9db78afa8d1fe1b0d0f7cbdb0"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c5af24610ab639bd1f521ce4500484b40787f898f691b7a23da3339e6bc8b90"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a7151186bb7805deea434fae9a4423335e6371d105f29e73cc2036c6779a9dbc"}, + {file = "pyobjc_framework_Cocoa-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:743d2a1ac08027fd09eab65814c79002a1d0421d7c0074ffd1217b6560889744"}, + {file = "pyobjc_framework_cocoa-10.3.1.tar.gz", hash = "sha256:1cf20714daaa986b488fb62d69713049f635c9d41a60c8da97d835710445281a"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-coreml" +version = "10.3.1" +description = "Wrappers for the framework CoreML on macOS" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c1fdcc0487807afa9cd0f88f25697e0e2e093d0219e8e1aa42aa3674dd78c2cb"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:21c87e84c807b5dbe61e0f016d9aefa32d3212f175cc4b976b5c08770be7a58c"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a0877aed5d4cdbb63d1246cd5384c09d78a0667e83c435a1257d10017c11c1a4"}, + {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4bd3f1acfb3245727727b71cbcf7d21a33d7e00fa488e41ad01527764b969b92"}, + {file = "pyobjc_framework_coreml-10.3.1.tar.gz", hash = "sha256:6b7091142cfaafee76f1a804329e7a4e3aeca921eea8644e9ceba4cc2751f705"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-quartz" +version = "10.3.1" +description = "Wrappers for the Quartz frameworks on macOS" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Quartz-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ef4fd315ed2bc42ef77fdeb2bae28a88ec986bd7b8079a87ba3b3475348f96e"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:96578d4a3e70164efe44ad7dc320ecd4e211758ffcde5dcd694de1bbdfe090a4"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ca35f92486869a41847a1703bb176aab8a53dbfd8e678d1f4d68d8e6e1581c71"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:00a0933267e3a46ea4afcc35d117b2efb920f06de797fa66279c52e7057e3590"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a161bedb4c5257a02ad56a910cd7eefb28bdb0ea78607df0d70ed4efe4ea54c1"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d7a8028e117a94923a511944bfa9daf9744e212f06cf89010c60934a479863a5"}, + {file = "pyobjc_framework_Quartz-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de00c983b3267eb26fa42c6ed9f15e2bf006bde8afa7fe2b390646aa21a5d6fc"}, + {file = "pyobjc_framework_quartz-10.3.1.tar.gz", hash = "sha256:b6d7e346d735c9a7f147cd78e6da79eeae416a0b7d3874644c83a23786c6f886"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" + +[[package]] +name = "pyobjc-framework-vision" +version = "10.3.1" +description = "Wrappers for the framework Vision on macOS" +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:dff3582678930461a0bb11bf070854d49f6944a851dc89edc63fac93c75ddf39"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:32626183c51674efb3b5738e2884c3fea37edca010117cf71bd72cb3c49c869a"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2473b346a112c51ac485184305bd13c402e0db45f2df3d277315bd49efba18e9"}, + {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4302e2c5f68c9667ecd4273809cbc4611af6368b123d69596e5b088f1b1aa16b"}, + {file = "pyobjc_framework_vision-10.3.1.tar.gz", hash = "sha256:aa071656d395afc2d624600a9f30d6a3344aa747bf37f613ff3972158c40881c"}, +] + +[package.dependencies] +pyobjc-core = ">=10.3.1" +pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-framework-CoreML = ">=10.3.1" +pyobjc-framework-Quartz = ">=10.3.1" + [[package]] name = "pypdfium2" version = "4.30.0" @@ -7248,9 +7360,10 @@ test = ["big-O", "importlib-resources", "jaraco.functools", "jaraco.itertools", type = ["pytest-mypy"] [extras] +ocrmac = ["ocrmac"] tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.10" -content-hash = "a0f599090cfd9414c0e90fd611fd0b23166a45cd925904491eb0503a6f6bd1d8" +content-hash = "129137f8229158ac7672919df1684a260f74db22517d4d40c905f801f2950f46" diff --git a/pyproject.toml b/pyproject.toml index abca5314..52c68035 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ beautifulsoup4 = "^4.12.3" pandas = "^2.1.4" marko = "^2.1.2" openpyxl = "^3.1.5" +ocrmac = { version = "^1.0.0", markers = "sys_platform == 'darwin'", optional = true } [tool.poetry.group.dev.dependencies] black = {extras = ["jupyter"], version = "^24.4.2"} @@ -95,6 +96,7 @@ torchvision = [ [tool.poetry.extras] tesserocr = ["tesserocr"] +ocrmac = ["ocrmac"] [tool.poetry.scripts] docling = "docling.cli.main:app" @@ -130,6 +132,7 @@ module = [ "tesserocr.*", "docling_ibm_models.*", "easyocr.*", + "ocrmac.*", "deepsearch_glm.*", "lxml.*", "bs4.*", diff --git a/tests/test_e2e_ocr_conversion.py b/tests/test_e2e_ocr_conversion.py index 324a4a14..68dac33e 100644 --- a/tests/test_e2e_ocr_conversion.py +++ b/tests/test_e2e_ocr_conversion.py @@ -1,3 +1,4 @@ +import sys from pathlib import Path from typing import List @@ -6,6 +7,7 @@ from docling.datamodel.base_models import InputFormat from docling.datamodel.document import ConversionResult from docling.datamodel.pipeline_options import ( EasyOcrOptions, + OcrMacOptions, OcrOptions, PdfPipelineOptions, TesseractCliOcrOptions, @@ -59,6 +61,11 @@ def test_e2e_conversions(): TesseractCliOcrOptions(force_full_page_ocr=True), ] + # only works on mac + if "darwin" == sys.platform: + engines.append(OcrMacOptions()) + engines.append(OcrMacOptions(force_full_page_ocr=True)) + for ocr_options in engines: print(f"Converting with ocr_engine: {ocr_options.kind}") converter = get_converter(ocr_options=ocr_options) From 7b013abcf31ba49e2141dfd408bc8c23e8d87d91 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Wed, 20 Nov 2024 15:21:40 +0100 Subject: [PATCH 09/40] fix: python3.9 support (#396) * fixes for python3.9 Signed-off-by: Michele Dolfi * pin docling-parse with python3.9 wheels Signed-off-by: Michele Dolfi * update deps Signed-off-by: Michele Dolfi --------- Signed-off-by: Michele Dolfi --- .github/workflows/checks.yml | 2 +- README.md | 2 +- docling/cli/main.py | 38 ++- docling/document_converter.py | 6 +- poetry.lock | 419 ++++++++++++++++------------------ pyproject.toml | 18 +- 6 files changed, 238 insertions(+), 247 deletions(-) diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 14a59f6d..6cd0d38b 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -6,7 +6,7 @@ jobs: runs-on: ubuntu-latest strategy: matrix: - python-version: ['3.10', '3.11', '3.12'] + python-version: ['3.9', '3.10', '3.11', '3.12'] steps: - uses: actions/checkout@v3 - name: Install tesseract diff --git a/README.md b/README.md index ca9ac4d1..893b604f 100644 --- a/README.md +++ b/README.md @@ -13,7 +13,7 @@ [![arXiv](https://img.shields.io/badge/arXiv-2408.09869-b31b1b.svg)](https://arxiv.org/abs/2408.09869) [![Docs](https://img.shields.io/badge/docs-live-brightgreen)](https://ds4sd.github.io/docling/) [![PyPI version](https://img.shields.io/pypi/v/docling)](https://pypi.org/project/docling/) -![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/docling)](https://pypi.org/project/docling/) [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) diff --git a/docling/cli/main.py b/docling/cli/main.py index 8e0d23c1..09102abd 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -254,17 +254,16 @@ def convert( export_txt = OutputFormat.TEXT in to_formats export_doctags = OutputFormat.DOCTAGS in to_formats - match ocr_engine: - case OcrEngine.EASYOCR: - ocr_options: OcrOptions = EasyOcrOptions(force_full_page_ocr=force_ocr) - case OcrEngine.TESSERACT_CLI: - ocr_options = TesseractCliOcrOptions(force_full_page_ocr=force_ocr) - case OcrEngine.TESSERACT: - ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) - case OcrEngine.OCRMAC: - ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) - case _: - raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") + if ocr_engine == OcrEngine.EASYOCR: + ocr_options: OcrOptions = EasyOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.TESSERACT_CLI: + ocr_options = TesseractCliOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.TESSERACT: + ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.OCRMAC: + ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) + else: + raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") ocr_lang_list = _split_list(ocr_lang) if ocr_lang_list is not None: @@ -281,15 +280,14 @@ def convert( if artifacts_path is not None: pipeline_options.artifacts_path = artifacts_path - match pdf_backend: - case PdfBackend.DLPARSE_V1: - backend: Type[PdfDocumentBackend] = DoclingParseDocumentBackend - case PdfBackend.DLPARSE_V2: - backend = DoclingParseV2DocumentBackend - case PdfBackend.PYPDFIUM2: - backend = PyPdfiumDocumentBackend - case _: - raise RuntimeError(f"Unexpected PDF backend type {pdf_backend}") + if pdf_backend == PdfBackend.DLPARSE_V1: + backend: Type[PdfDocumentBackend] = DoclingParseDocumentBackend + elif pdf_backend == PdfBackend.DLPARSE_V2: + backend = DoclingParseV2DocumentBackend + elif pdf_backend == PdfBackend.PYPDFIUM2: + backend = PyPdfiumDocumentBackend + else: + raise RuntimeError(f"Unexpected PDF backend type {pdf_backend}") format_options: Dict[InputFormat, FormatOption] = { InputFormat.PDF: PdfFormatOption( diff --git a/docling/document_converter.py b/docling/document_converter.py index 9304fb11..74e6f84a 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -3,7 +3,7 @@ import sys import time from functools import partial from pathlib import Path -from typing import Dict, Iterable, Iterator, List, Optional, Type +from typing import Dict, Iterable, Iterator, List, Optional, Type, Union from pydantic import BaseModel, ConfigDict, model_validator, validate_call @@ -155,7 +155,7 @@ class DocumentConverter: @validate_call(config=ConfigDict(strict=True)) def convert( self, - source: Path | str | DocumentStream, # TODO review naming + source: Union[Path, str, DocumentStream], # TODO review naming raises_on_error: bool = True, max_num_pages: int = sys.maxsize, max_file_size: int = sys.maxsize, @@ -172,7 +172,7 @@ class DocumentConverter: @validate_call(config=ConfigDict(strict=True)) def convert_all( self, - source: Iterable[Path | str | DocumentStream], # TODO review naming + source: Iterable[Union[Path, str, DocumentStream]], # TODO review naming raises_on_error: bool = True, # True: raises on first conversion error; False: does not raise on conv error max_num_pages: int = sys.maxsize, max_file_size: int = sys.maxsize, diff --git a/poetry.lock b/poetry.lock index d8dd1c80..c1771bbd 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.4" +version = "3.11.6" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a60f8206818e3582c999c999c799ab068e14f1870ade47d1fe8536dbfd88010b"}, - {file = "aiohttp-3.11.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:e5786e5926f888ce3a996d38d9c9b8f9306f399edb1f1ca3ce7760dab9b1043c"}, - {file = "aiohttp-3.11.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:262e45dbd7f1829bcb024259f65b2cf69d1ef5b37626af6955a1c487613aeb3a"}, - {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:696adff3594bd449e0fe287441062bdc6f5300928426275b39ed27884ba083a7"}, - {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6dd1411ecfc070af4df129e81fe42c799d95d81c29c22d2c3e4341d974c38f1a"}, - {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:06defa9017ab50d215446ebbee294e07eb2fcee72d9a909a08192cfacbd43a08"}, - {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bc936d10b8fa3f2aa66e59e034085208b588442263400ddb042703d0db99421"}, - {file = "aiohttp-3.11.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:769457243dc4bc902d376cd14c5c7ec234a4faadb4f283dc2738f004cce9a9e1"}, - {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:7a360c18b2cb391fec9585ba1efc55150e2fbc6100308113117dfea521e810d8"}, - {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3e9fd9c11299d6d230eb2669fd1ed0238d33970e36b495b0432ace7f157fc931"}, - {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:0ccbe8ece8a7796ef41b86a3240034c5918d9b324c2ae48fa0be33565e297c64"}, - {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9a8b6b3c788a8a6f88f5ce23d729cfde7a2ccebbeb09db0822ef266de0445a27"}, - {file = "aiohttp-3.11.4-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cbe3e356523d0b336543996f92a0e65f760be82447db21c95c60392c8075ff5c"}, - {file = "aiohttp-3.11.4-cp310-cp310-win32.whl", hash = "sha256:a54424050d1eb36edfef913b1bc8552d52a37864c0ea7df3e1e764663e11053a"}, - {file = "aiohttp-3.11.4-cp310-cp310-win_amd64.whl", hash = "sha256:a51f983d91edae7777b5a2af8e5d83224ba01284502c6874a17647ad6cbf0211"}, - {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:89261fee04715083ef3b5a0d222b094021793c1728b8ff21da361c79f6384095"}, - {file = "aiohttp-3.11.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4ef6eb1367046fb22085f10c5c84ea2efd0d836ad8088306d652ab1d743faf9e"}, - {file = "aiohttp-3.11.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d68bb99bc6a4b0a3eceb95a246f5a0262e600e094b5178c2b1ab0f4bcbae6729"}, - {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a550b4ff70d06c15057d75ddad89a3e7c496e0609d28c567c20b61cd1265c0a6"}, - {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9b41e0fb3b415beccd6d0c6e5f3ee34b7952cd76120a1db3e45507b83dc5ef81"}, - {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8feffa8396724116be5bc05bf4fcba0c738cbe908c82a95f71371e32b28cd2ca"}, - {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1dd5b7947e23a08c70d4c1924809b91211f14136ffd13d303dc487913cfebfeb"}, - {file = "aiohttp-3.11.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ab5c6a521b156edef13a57a6d524903c547573ff8101e3d1bbe9ee1b97267973"}, - {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:010bc9606f798eda8ef071759c7b163893071502bcaedc7d5dc49f9d8f12e553"}, - {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e7d182164aebad4e2faf2742ee7486d4af73d933461adbd8f183ac9b1837323c"}, - {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:88e681c0d17bb285d2ccbb73ae77ef86339b632ee7967044c2284411120b9730"}, - {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0d2cea21ec05b832e9f6a2390b23d32ce5575f6cf4812bd171d4493f59c101fe"}, - {file = "aiohttp-3.11.4-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:635397b5b4de2397f8136f8fd15c8ebee560e36473195c7aa992ffb8e46acdd3"}, - {file = "aiohttp-3.11.4-cp311-cp311-win32.whl", hash = "sha256:cb2d5a24586b508f658ddd710f7d4b7e4f5656cb5d569aeb1f432c1c3704347a"}, - {file = "aiohttp-3.11.4-cp311-cp311-win_amd64.whl", hash = "sha256:ee081375d10fa2f3f7b0d050c8b9c1ae23190e1d9be256035bf8a41059c4df3a"}, - {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:5cd60673be31449c63f59886f3581478bbdfaddd87e7394a4d73ad134d9be9b9"}, - {file = "aiohttp-3.11.4-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4ff6105856ae688b29d5daaede1256f5e02e9d5cb3059f8f5ef55d975c2e6992"}, - {file = "aiohttp-3.11.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:b169507c98b924fd68b82ae366c285daf6d22456835294c329c3226d61e1f69d"}, - {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6ec84106c8b7ff347be06bf579c298a23b6d1d2225c57273a8cd502f257125d4"}, - {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:03d53b0888f984f4f0c216a37577ee7e7b1ed1dac89cdd2fde61bf2ccb32009b"}, - {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:822dedad93947fcb1096cc41ee8fd32e9f652777561a37c740e5335699f01cea"}, - {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aef239c307f3a3f830933d612c0aef4ad4b3aa9ce5233a0954262a00f5c379f1"}, - {file = "aiohttp-3.11.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49eb5a0338f141ef32299d48f1415486f47953d37b0c7fa6d778b73b66f3a7e2"}, - {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:7be4efe60e9bddf78ee165a296e80170147282081e1366f0580cf4cc0fb1182f"}, - {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:66e83a9a1131f0060aaedcc57f1a7e489898b6c3607eededccc7a9f80b95bdb4"}, - {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:a7986fb988314fd2225c1ecab45fd457e1f2c097dcc3c0aacd2a7aec7486beb6"}, - {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a34c30e1461da3a69c5bdcfce44418b6f969e1e68ebf367edfa5eaab380abf7a"}, - {file = "aiohttp-3.11.4-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:cb4c676ab99ca2dd231928d481e19cd540155dff36e70e613179c4927bd520b8"}, - {file = "aiohttp-3.11.4-cp312-cp312-win32.whl", hash = "sha256:d40d9a740053cb7fef72442fa7bd699060ff4c710971ebdb8dd7c8b36417570f"}, - {file = "aiohttp-3.11.4-cp312-cp312-win_amd64.whl", hash = "sha256:365df6cf2ad144479ba0e0b58abdc5276923676d34da4c1c45613a80d2aac130"}, - {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f307632f3eaa676f8c2f5df11e4c00ad47dfa79b06cb2fa39156a4e9c6821bdb"}, - {file = "aiohttp-3.11.4-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:cc2d64b1747efa183ced57b6bce53c9ea8e16e53419e389051b2a214ad0ed051"}, - {file = "aiohttp-3.11.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:f37ece590451ecffc815f2eb41f07191d1a31a0404361d1ae2ed532e05c86da4"}, - {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b10b316413c80a4dcc5228c092a8d019e4b75d4efbca8988cb5b67ae9fa56881"}, - {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:beaed1b2d03033dd301a7b67430f03c8255d6856a269c20995a0292de596519e"}, - {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:518578d6821c942362daa14a56f26b739abeede6e408b0b83e27dfcde17730f7"}, - {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e1e09bc44a1abbd96f55d15330d6cab80459cb8b06a0b656efd712ce47a3710d"}, - {file = "aiohttp-3.11.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae8480148d696dae49126e97568333fc01493069ad46a94b82f69c7a33197ea"}, - {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:b71aab89800fa2eaeb28923ee05e7e56c28dab4ebdba524db06e963431bf6192"}, - {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:821c9c640d3dc456c6a7b005e38bc5af05326b6a08ce91a068719934d108a1bb"}, - {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:d60255f3ed71aa14a2e75383543ca31bd362fdc7f0d2eafc060d85a9051598df"}, - {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:9788781f57fb732426ae74b9955b899e677ce42b848e60a11be29358fb20c976"}, - {file = "aiohttp-3.11.4-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:94acecf2eee13a45f627ed25a28f5a7f2db66b90ff94cd7a1e9cc1ad32cddd43"}, - {file = "aiohttp-3.11.4-cp313-cp313-win32.whl", hash = "sha256:d0fd6510c6d67d08ec80d9ba10cd340a8cfb0dd33436c858ed38d4564abb27c7"}, - {file = "aiohttp-3.11.4-cp313-cp313-win_amd64.whl", hash = "sha256:474f7266a61d1c3218ef4ec0325747884b2d5a13fab5bff5dd3b55d9c849406a"}, - {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cfe8646a24856624c1eb7649da99333f0d7e75d9cf7c155ea870957d24b7c63c"}, - {file = "aiohttp-3.11.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:e69d9869df50dd591228c62fbb3923d6124517d6bfc47a804492813888b497be"}, - {file = "aiohttp-3.11.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:eb4f1fe110332651c00d2df160978cf1be70896ed9e612ff7c7e67955091b2c4"}, - {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d97668595bf03299148ea968fed2195cc76ad063aeec8161731aa6a5dbc2f675"}, - {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0b3378dc294ad6ec6c038ed57164165e0b83ef5f61eee72f6eefccd7df34b8"}, - {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0898a77298dc24eef368511d98e551e0b2db293fa9b40c982f4d5ab4d8d2a3a"}, - {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5ecdf43ddde709c336a655c8b3858c56af8f7402de2572001a5a99f7bebf2f78"}, - {file = "aiohttp-3.11.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:12bf9c139dfa004b65d2d71906abc593dcafe78a508f33d56c1ca9d87b18337f"}, - {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:2d978a95e4b58ef1fd937fbe347ab397c79ba24e17912595b54faafb88b9b937"}, - {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:1e32517c01905e0f4e665c3f3a495868ad996a32c243fcd917587d740253d589"}, - {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:4275160583df18158e0d6789797ad314a14ae611b98933fbe7d7a1c3dcc6bad4"}, - {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1ff7afc3c461bd9217e2b8a90ddbe5edd94687d5a331c4ae6166dca5876d1a4b"}, - {file = "aiohttp-3.11.4-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:83bd5aa621b732a0ca1aa3490abd2b010247c4677371a804431935aeedf26e74"}, - {file = "aiohttp-3.11.4-cp39-cp39-win32.whl", hash = "sha256:542a4610571b0affc6e13dda9357235f5f1f2ad9859acc69b188eb53901292d6"}, - {file = "aiohttp-3.11.4-cp39-cp39-win_amd64.whl", hash = "sha256:a468b1b9d5499cbfd0411f5d28adbe651c90508540fdaefb4b7a2171a837a88d"}, - {file = "aiohttp-3.11.4.tar.gz", hash = "sha256:9d95cce8bb010597b3f2217155befe4708e0538d3548aa08d640ebf54e3f57cb"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7510b3ca2275691875ddf072a5b6cd129278d11fe09301add7d292fc8d3432de"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfab0d2c3380c588fc925168533edb21d3448ad76c3eadc360ff963019161724"}, + {file = "aiohttp-3.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf02dba0f342f3a8228f43fae256aafc21c4bc85bffcf537ce4582e2b1565188"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92daedf7221392e7a7984915ca1b0481a94c71457c2f82548414a41d65555e70"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2274a7876e03429e3218589a6d3611a194bdce08c3f1e19962e23370b47c0313"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a2e1eae2d2f62f3660a1591e16e543b2498358593a73b193006fb89ee37abc6"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978ec3fb0a42efcd98aae608f58c6cfcececaf0a50b4e86ee3ea0d0a574ab73b"}, + {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51f87b27d9219ed4e202ed8d6f1bb96f829e5eeff18db0d52f592af6de6bdbf"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04d1a02a669d26e833c8099992c17f557e3b2fdb7960a0c455d7b1cbcb05121d"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3679d5fcbc7f1ab518ab4993f12f80afb63933f6afb21b9b272793d398303b98"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a4b24e03d04893b5c8ec9cd5f2f11dc9c8695c4e2416d2ac2ce6c782e4e5ffa5"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d9abdfd35ecff1c95f270b7606819a0e2de9e06fa86b15d9080de26594cf4c23"}, + {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b5c3e7928a0ad80887a5eba1c1da1830512ddfe7394d805badda45c03db3109"}, + {file = "aiohttp-3.11.6-cp310-cp310-win32.whl", hash = "sha256:913dd9e9378f3c38aeb5c4fb2b8383d6490bc43f3b427ae79f2870651ae08f22"}, + {file = "aiohttp-3.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:4ac26d482c2000c3a59bf757a77adc972828c9d4177b4bd432a46ba682ca7271"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26ac4c960ea8debf557357a172b3ef201f2236a462aefa1bc17683a75483e518"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b1f13ebc99fb98c7c13057b748f05224ccc36d17dee18136c695ef23faaf4ff"}, + {file = "aiohttp-3.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4679f1a47516189fab1774f7e45a6c7cac916224c91f5f94676f18d0b64ab134"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74491fdb3d140ff561ea2128cb7af9ba0a360067ee91074af899c9614f88a18f"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f51e1a90412d387e62aa2d243998c5eddb71373b199d811e6ed862a9f34f9758"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72ab89510511c3bb703d0bb5504787b11e0ed8be928ed2a7cf1cda9280628430"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6681c9e046d99646e8059266688374a063da85b2e4c0ebfa078cda414905d080"}, + {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a17f8a6d3ab72cbbd137e494d1a23fbd3ea973db39587941f32901bb3c5c350"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:867affc7612a314b95f74d93aac550ce0909bc6f0b6c658cc856890f4d326542"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:00d894ebd609d5a423acef885bd61e7f6a972153f99c5b3ea45fc01fe909196c"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:614c87be9d0d64477d1e4b663bdc5d1534fc0a7ebd23fb08347ab9fd5fe20fd7"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:533ed46cf772f28f3bffae81c0573d916a64dee590b5dfaa3f3d11491da05b95"}, + {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589884cfbc09813afb1454816b45677e983442e146183143f988f7f5a040791a"}, + {file = "aiohttp-3.11.6-cp311-cp311-win32.whl", hash = "sha256:1da63633ba921669eec3d7e080459d4ceb663752b3dafb2f31f18edd248d2170"}, + {file = "aiohttp-3.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:d778ddda09622e7d83095cc8051698a0084c155a1474bfee9bac27d8613dbc31"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:943a952df105a5305257984e7a1f5c2d0fd8564ff33647693c4d07eb2315446d"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d24ec28b7658970a1f1d98608d67f88376c7e503d9d45ff2ba1949c09f2b358c"}, + {file = "aiohttp-3.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6720e809a660fdb9bec7c168c582e11cfedce339af0a5ca847a5d5b588dce826"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4252d30da0ada6e6841b325869c7ef5104b488e8dd57ec439892abbb8d7b3615"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f65f43ff01b238aa0b5c47962c83830a49577efe31bd37c1400c3d11d8a32835"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dc5933f6c9b26404444d36babb650664f984b8e5fa0694540e7b7315d11a4ff"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bf546ba0c029dfffc718c4b67748687fd4f341b07b7c8f1719d6a3a46164798"}, + {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c351d05bbeae30c088009c0bb3b17dda04fd854f91cc6196c448349cc98f71c3"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:10499079b063576fad1597898de3f9c0a2ce617c19cc7cd6b62fdcff6b408bf7"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:442ee82eda47dd59798d6866ce020fb8d02ea31ac9ac82b3d719ed349e6a9d52"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:86fce9127bc317119b34786d9e9ae8af4508a103158828a535f56d201da6ab19"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:973d26a5537ce5d050302eb3cd876457451745b1da0624cbb483217970e12567"}, + {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:532b8f038a4e001137d3600cea5d3439d1881df41bdf44d0f9651264d562fdf0"}, + {file = "aiohttp-3.11.6-cp312-cp312-win32.whl", hash = "sha256:4863c59f748dbe147da82b389931f2a676aebc9d3419813ed5ca32d057c9cb32"}, + {file = "aiohttp-3.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:5d7f481f82c18ac1f7986e31ba6eea9be8b2e2c86f1ef035b6866179b6c5dd68"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:40f502350496ba4c6820816d3164f8a0297b9aa4e95d910da31beb189866a9df"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9072669b0bffb40f1f6977d0b5e8a296edc964f9cefca3a18e68649c214d0ce3"}, + {file = "aiohttp-3.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:518160ecf4e6ffd61715bc9173da0925fcce44ae6c7ca3d3f098fe42585370fb"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69cc1b45115ac44795b63529aa5caa9674be057f11271f65474127b24fc1ce6"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6be90a6beced41653bda34afc891617c6d9e8276eef9c183f029f851f0a3c3d"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00c22fe2486308770d22ef86242101d7b0f1e1093ce178f2358f860e5149a551"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2607ebb783e3aeefa017ec8f34b506a727e6b6ab2c4b037d65f0bc7151f4430a"}, + {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f761d6819870c2a8537f75f3e2fc610b163150cefa01f9f623945840f601b2c"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e44d1bc6c88f5234115011842219ba27698a5f2deee245c963b180080572aaa2"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e0cb6a1b1f499cb2aa0bab1c9f2169ad6913c735b7447e058e0c29c9e51c0b5"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a76b4d4ca34254dca066acff2120811e2a8183997c135fcafa558280f2cc53f3"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69051c1e45fb18c0ae4d39a075532ff0b015982e7997f19eb5932eb4a3e05c17"}, + {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aff2ed18274c0bfe0c1d772781c87d5ca97ae50f439729007cec9644ee9b15fe"}, + {file = "aiohttp-3.11.6-cp313-cp313-win32.whl", hash = "sha256:2fbea25f2d44df809a46414a8baafa5f179d9dda7e60717f07bded56300589b3"}, + {file = "aiohttp-3.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:f77bc29a465c0f9f6573d1abe656d385fa673e34efe615bd4acc50899280ee47"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de6123b298d17bca9e53581f50a275b36e10d98e8137eb743ce69ee766dbdfe9"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a10200f705f4fff00e148b7f41e5d1d929c7cd4ac523c659171a0ea8284cd6fb"}, + {file = "aiohttp-3.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7776ef6901b54dd557128d96c71e412eec0c39ebc07567e405ac98737995aad"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e5c2a55583cd91936baf73d223807bb93ace6eb1fe54424782690f2707162ab"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b032bd6cf7422583bf44f233f4a1489fee53c6d35920123a208adc54e2aba41e"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fe2d99acbc5cf606f75d7347bf3a027c24c27bc052d470fb156f4cfcea5739"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a79c366375c2250934d1238abe5d5ea7754c823a1c7df0c52bf0a2bfded6a9"}, + {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c33cbbe97dc94a34d1295a7bb68f82727bcbff2b284f73ae7e58ecc05903da97"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:19e4fb9ac727834b003338dcdd27dcfe0de4fb44082b01b34ed0ab67c3469fc9"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a97f6b2afbe1d27220c0c14ea978e09fb4868f462ef3d56d810d206bd2e057a2"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f7afeea03a9bc49be6053dfd30809cd442cc12627d6ca08babd1c1f9e04ccf"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0d10967600ce5bb69ddcb3e18d84b278efb5199d8b24c3c71a4959c2f08acfd0"}, + {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:60f2f631b9fe7aa321fa0f0ff3f5d8b9f7f9b72afd4eecef61c33cf1cfea5d58"}, + {file = "aiohttp-3.11.6-cp39-cp39-win32.whl", hash = "sha256:4d2b75333deb5c5f61bac5a48bba3dbc142eebbd3947d98788b6ef9cc48628ae"}, + {file = "aiohttp-3.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:8908c235421972a2e02abcef87d16084aabfe825d14cc9a1debd609b3cfffbea"}, + {file = "aiohttp-3.11.6.tar.gz", hash = "sha256:fd9f55c1b51ae1c20a1afe7216a64a88d38afee063baa23c7fce03757023c999"}, ] [package.dependencies] @@ -182,8 +182,8 @@ files = [ lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ - {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, + {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, ] [[package]] @@ -825,8 +825,8 @@ files = [ docling-core = ">=2.0,<3.0" docutils = "!=0.21" numpy = [ - {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, ] pandas = {version = ">=2.1.4,<3.0.0", markers = "python_version >= \"3.9\""} python-dotenv = ">=1.0.0,<2.0.0" @@ -898,22 +898,21 @@ tabulate = ">=0.9.0,<0.10.0" [[package]] name = "docling-ibm-models" -version = "2.0.4" +version = "2.0.6" description = "This package contains the AI models used by the Docling PDF conversion package" optional = false -python-versions = "<4.0,>=3.10" +python-versions = "<4.0,>=3.9" files = [ - {file = "docling_ibm_models-2.0.4-py3-none-any.whl", hash = "sha256:425ebe86fb67c0ab22128e8d08cd8d4a94a4676d4a88282c76efdcf2b0e08534"}, - {file = "docling_ibm_models-2.0.4.tar.gz", hash = "sha256:f21b68755ee253225c95b4710ec68eb575d7cdef4abe07ee9f13936e1c8f208d"}, + {file = "docling_ibm_models-2.0.6-py3-none-any.whl", hash = "sha256:1702b413353d18089511cb73fc325606eb3601b1406b1367a7c5070081f44af2"}, + {file = "docling_ibm_models-2.0.6.tar.gz", hash = "sha256:b06bb8e426c8d53cb300b17a432120917a335390665302d82f311a3647ee1bca"}, ] [package.dependencies] huggingface_hub = ">=0.23,<1" jsonlines = ">=3.1.0,<4.0.0" -mean_average_precision = ">=2021.4.26.0,<2022.0.0.0" numpy = [ - {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, + {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, ] opencv-python-headless = ">=4.6.0.66,<5.0.0.0" Pillow = ">=10.0.0,<11.0.0" @@ -923,41 +922,49 @@ tqdm = ">=4.64.0,<5.0.0" [[package]] name = "docling-parse" -version = "2.0.4" +version = "2.0.5" description = "Simple package to extract text with coordinates from programmatic PDFs" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_parse-2.0.4-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:1ba71aa48538fd118b7f5e872573d384c335d205d3c6bde102067e0bf2b7d6a9"}, - {file = "docling_parse-2.0.4-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:156f34124408a1d016e6a3e1c5a82f58e43c96acc8f3896e81bfb2b5ecc127d5"}, - {file = "docling_parse-2.0.4-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:32f6e791bceb3b1cac357878929ec976aeb50c40b395518934f4817bb2530eae"}, - {file = "docling_parse-2.0.4-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:580b01b9276845a410d3aa59397cacb06ad3cf4f471bdfd18187ac0dfdcaaafc"}, - {file = "docling_parse-2.0.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4fce1f091aed82e16726658174d06098642c197ce1ded9508571aa2416a2a03"}, - {file = "docling_parse-2.0.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d5447cce907ba6725609346f04d38a83671d2e0b13b468d27a0a861d96af144"}, - {file = "docling_parse-2.0.4-cp310-cp310-win_amd64.whl", hash = "sha256:ce2120287efe4fe408795cfeea881a71d6980527a46ee583a69247e8404d4c0b"}, - {file = "docling_parse-2.0.4-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:52c94fe627382541e13a8e7fbad8242b618636db55eeeeacc6e92dbf88130812"}, - {file = "docling_parse-2.0.4-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:10c7a2e68a124ebb54b1e27ce6c85ef2f4d9da294e391fc131a9b39b1f9ce657"}, - {file = "docling_parse-2.0.4-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:43dc41995310ed0b0015bea6f72df7cb71106a8550d79946f66f30b2ab2c3a29"}, - {file = "docling_parse-2.0.4-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:f385d97cb0cf0933a5f0eb4da8b0f9fc9d8629bbf93d57b9043b7a51ba0b33c8"}, - {file = "docling_parse-2.0.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:449c449168cada11eaa83a779e2c25ed4e9e9aec63db2012222ee28fa048a020"}, - {file = "docling_parse-2.0.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87dbf20715dbbb9b7d5ff49475b65ce88454c43c0b00bb8ec5bda30643c79003"}, - {file = "docling_parse-2.0.4-cp311-cp311-win_amd64.whl", hash = "sha256:6e56726829cb82977f5441db4e1f4d9357faf3ed3dfd55bfa135e650d476a8d8"}, - {file = "docling_parse-2.0.4-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:60c560ed7fdfda1748dca23c858d2d5eb0eff5858fef060bfc4851e1f949e915"}, - {file = "docling_parse-2.0.4-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:d35c8c3dd8f580820ec8905be48e37a36f8c3fe8cacbe366ba75c7c35e0de938"}, - {file = "docling_parse-2.0.4-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:419dabf6aa0f895878d489a95bdd173661d0891674638c6c01a9b5ca8f156839"}, - {file = "docling_parse-2.0.4-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ff7fb21829aa2acad6874ac78b87cfaa642b0910ae6d60e90007c2021fe05c73"}, - {file = "docling_parse-2.0.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:132e7db9042f13141ec089562478737fb8df70fcd33a0cb0161c7e6cfebf5b46"}, - {file = "docling_parse-2.0.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b1ccc13bb32b5c5877f9c3f8870a88beb56d1ab3335ce8a81561cdba1054dfb"}, - {file = "docling_parse-2.0.4-cp312-cp312-win_amd64.whl", hash = "sha256:ac34fae4e0080dd8719c22a4aa49a013003a13f3f6bf68f5763136ac7626e390"}, - {file = "docling_parse-2.0.4-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:e8cc56e41ae4caf4302ebeaaeb02de2b60edcf5ed4bdcdf13a67eca0c1b9f39a"}, - {file = "docling_parse-2.0.4-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:bc2efba8183356c6437a62e9802055988f5edc2d907ea1a42a2613737b2fc77e"}, - {file = "docling_parse-2.0.4-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:db839a2a7a8742b93a5cab4d91c664938306d248177bc5b716527003c32054a3"}, - {file = "docling_parse-2.0.4-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:737fb79b6c91a676ac7cdf4ced65c85f687a968b9d1d2ef95b04958fbbc554ff"}, - {file = "docling_parse-2.0.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0c02edd935eb5d4d3b4a64564ac92f6a427bb106cb5632f745d853a6ba7b7441"}, - {file = "docling_parse-2.0.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e84a3c50086380fff7925cfd9e9e4e62b2d2f4b79660520999f39207d478b18"}, - {file = "docling_parse-2.0.4-cp313-cp313-win_amd64.whl", hash = "sha256:99cfb99c1fc65573a45e2c99b98cc6483134451d42a81b9f4cea27e4e858415e"}, - {file = "docling_parse-2.0.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2e2dbe4e18b6aa2f2fe8801685846d7b6a9bb355d6eac48b697cd9d1b62501e1"}, - {file = "docling_parse-2.0.4.tar.gz", hash = "sha256:bdcdfe070509e137846108056931e3738ad3225fcb31ed1496e9368690c3036d"}, + {file = "docling_parse-2.0.5-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:8e35b43fecba970d5d86ab44a176761e868a77195d023ec8a7d9ab40625e8bf2"}, + {file = "docling_parse-2.0.5-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:9be80f15f922eb71c27fa0ea6b028504a1b5d762f580dee99e82ee1edb6534e7"}, + {file = "docling_parse-2.0.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fe372cd1ac79966c166be52e31dd0807cb3ead76a86177a00911cc3d6758a403"}, + {file = "docling_parse-2.0.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6c31c0fac1ed2807d58ed3b61b73fd7a631430d862e1a7f9f1c32838a35578bc"}, + {file = "docling_parse-2.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3a5afd88f39bdec3ea4c91bdf94c53789182d304832532aa8352a17cd6f847a"}, + {file = "docling_parse-2.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d50bb7e2e4509320c41252ec6f07e627ced12f78d8dbd908385aed5c878f2f"}, + {file = "docling_parse-2.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:362f3050e4bba93921054086993050897ba9a40e0ea00e0fd55f5776e14db7fc"}, + {file = "docling_parse-2.0.5-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a61ca5cd4d3d6336e9ee7ead3184943e6e01e880efb892b64c8796933c3b2965"}, + {file = "docling_parse-2.0.5-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d7b96bf3f0d8c97fbabc23dcb3c6b7f91b68653c2d04ed74cbb2d7f808165296"}, + {file = "docling_parse-2.0.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:07c5caf808dad544a03955ef80411c42193d4c347100e7767eb2e4bf8fcc7c2a"}, + {file = "docling_parse-2.0.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:31f941457ba583a078115d4f64e414fb6b08d62c8208e6f42df8b55cd4eb2dd5"}, + {file = "docling_parse-2.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96439c99a52181b1ac7ddc3754a93a08251103e79bf98d763fb36a0012576969"}, + {file = "docling_parse-2.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e3e9af47e64e61ecff7e7b4ba648604b1fb4d7d3a75ea6121308a9f7aece4ea"}, + {file = "docling_parse-2.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:9ff6698b75e5e83ea6740b383bbe29d01fc8db7a73625e83e3ab4f24391a0fa1"}, + {file = "docling_parse-2.0.5-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:47a60672148e228b97ed26d6abaf72b4157bb66338be6eaacb9838fe20ae88d3"}, + {file = "docling_parse-2.0.5-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:dee45459109e05f39b0d8be434b56dd44e2d6b79dbd2c2840c7e8a55881d80ae"}, + {file = "docling_parse-2.0.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2a256718a2833fba8da7508548e0421f7f17ec3183c1afc1046a9de1f006ff86"}, + {file = "docling_parse-2.0.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ac195e295b95e6cf5f06b54caabf610952115419dcd1d79f4bfea8b83fa4269f"}, + {file = "docling_parse-2.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3b2e3bb31e3d6319fb9be8a7b424ddd514a34d5f28fd5e6e83bd45a7f1e5687"}, + {file = "docling_parse-2.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62d080c1b01a60049384d2f7c3b0484c61f894068a779c19b69034a44d8ed6f"}, + {file = "docling_parse-2.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:7b5ba90818ab3cdfb623d4ce3c65949956e0c3dba6c58ede0d142703ec0b88e5"}, + {file = "docling_parse-2.0.5-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:287c5466f121499d3352bb7f8255d7eb7c39d7d32f9424357d32993f2655322e"}, + {file = "docling_parse-2.0.5-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:33f1ea27629f8ac3956edc27453be06612d9455e80827431545b754be9039edd"}, + {file = "docling_parse-2.0.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8fbf564bf3ae5abc1422a391013048eaa8ead00f4876dd8b2fa7fd6e8538d622"}, + {file = "docling_parse-2.0.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5d1cd612f41a482318cb098904229fec1d55de36e30442063105bd892df7e729"}, + {file = "docling_parse-2.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daa8ddb6ad2bc140e735f405cc22a19b99cb493fdb244424cd29544f78c823be"}, + {file = "docling_parse-2.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18d5acd255c15c3e570f1aeb0c2600905237baf20786df6b01f065f49ad7d413"}, + {file = "docling_parse-2.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:9adac3989b93c13f5030d537a7d49ee9e34564e49995b6dccbbb3d7f5431601a"}, + {file = "docling_parse-2.0.5-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:6b41f153626df3616270478d2b293888b6c79b9dc3fbd9581ca964c5ab246d9c"}, + {file = "docling_parse-2.0.5-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:4b69f47859e34959878874c82e723fff235a47250404a71a996c71b8a44f5664"}, + {file = "docling_parse-2.0.5-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:6943cd9562a298b5eb9e92be0cb5b023eca5290aecbc36411d54e7bb753beb9d"}, + {file = "docling_parse-2.0.5-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:0d1e17826231aaaf7283e20dc47ac7e11d881d663e3ae79c8b552a144a191570"}, + {file = "docling_parse-2.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a2f68a02267bd5467460330d317956d22a90b3cb63f0c83346a97d018eff161"}, + {file = "docling_parse-2.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c654e484dc239fc2f588ca5368e8db68931a22eadb97a8d14693e3cfa7d2fe2"}, + {file = "docling_parse-2.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:e839adabfcb5ad9f5c1baf4d5a8acd6c85799a440b7809481c4ab161e8a1d063"}, + {file = "docling_parse-2.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7ad900a581f404d219b2f7a87aa17321936e5ae1ae7f3fd4fc30801dab9f36d0"}, + {file = "docling_parse-2.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:96391070723ac954fcef1841e473f1c875b76208717cb4789694e2c37e46066c"}, + {file = "docling_parse-2.0.5.tar.gz", hash = "sha256:09ac1fff90ab2cb942ad70eee59213a48b737e2df002186e8253b439c0ea9285"}, ] [package.dependencies] @@ -1649,13 +1656,13 @@ test = ["flaky", "ipyparallel", "pre-commit", "pytest (>=7.0)", "pytest-asyncio [[package]] name = "ipython" -version = "8.29.0" +version = "8.18.1" description = "IPython: Productive Interactive Computing" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "ipython-8.29.0-py3-none-any.whl", hash = "sha256:0188a1bd83267192123ccea7f4a8ed0a78910535dbaa3f37671dca76ebd429c8"}, - {file = "ipython-8.29.0.tar.gz", hash = "sha256:40b60e15b22591450eef73e40a027cf77bd652e757523eebc5bd7c7c498290eb"}, + {file = "ipython-8.18.1-py3-none-any.whl", hash = "sha256:e8267419d72d81955ec1177f8a29aaa90ac80ad647499201119e2f05e99aa397"}, + {file = "ipython-8.18.1.tar.gz", hash = "sha256:ca6f079bb33457c66e233e4580ebfc4128855b4cf6370dddd73842a9563e8a27"}, ] [package.dependencies] @@ -1664,26 +1671,25 @@ decorator = "*" exceptiongroup = {version = "*", markers = "python_version < \"3.11\""} jedi = ">=0.16" matplotlib-inline = "*" -pexpect = {version = ">4.3", markers = "sys_platform != \"win32\" and sys_platform != \"emscripten\""} +pexpect = {version = ">4.3", markers = "sys_platform != \"win32\""} prompt-toolkit = ">=3.0.41,<3.1.0" pygments = ">=2.4.0" stack-data = "*" -traitlets = ">=5.13.0" -typing-extensions = {version = ">=4.6", markers = "python_version < \"3.12\""} +traitlets = ">=5" +typing-extensions = {version = "*", markers = "python_version < \"3.10\""} [package.extras] -all = ["ipython[black,doc,kernel,matplotlib,nbconvert,nbformat,notebook,parallel,qtconsole]", "ipython[test,test-extra]"] +all = ["black", "curio", "docrepr", "exceptiongroup", "ipykernel", "ipyparallel", "ipywidgets", "matplotlib", "matplotlib (!=3.2.0)", "nbconvert", "nbformat", "notebook", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "qtconsole", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "trio", "typing-extensions"] black = ["black"] -doc = ["docrepr", "exceptiongroup", "intersphinx-registry", "ipykernel", "ipython[test]", "matplotlib", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "sphinxcontrib-jquery", "tomli", "typing-extensions"] +doc = ["docrepr", "exceptiongroup", "ipykernel", "matplotlib", "pickleshare", "pytest (<7)", "pytest (<7.1)", "pytest-asyncio (<0.22)", "setuptools (>=18.5)", "sphinx (>=1.3)", "sphinx-rtd-theme", "stack-data", "testpath", "typing-extensions"] kernel = ["ipykernel"] -matplotlib = ["matplotlib"] nbconvert = ["nbconvert"] nbformat = ["nbformat"] notebook = ["ipywidgets", "notebook"] parallel = ["ipyparallel"] qtconsole = ["qtconsole"] -test = ["packaging", "pickleshare", "pytest", "pytest-asyncio (<0.22)", "testpath"] -test-extra = ["curio", "ipython[test]", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.23)", "pandas", "trio"] +test = ["pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath"] +test-extra = ["curio", "matplotlib (!=3.2.0)", "nbformat", "numpy (>=1.22)", "pandas", "pickleshare", "pytest (<7.1)", "pytest-asyncio (<0.22)", "testpath", "trio"] [[package]] name = "ipywidgets" @@ -1937,6 +1943,7 @@ files = [ ] [package.dependencies] +importlib-metadata = {version = ">=4.8.3", markers = "python_version < \"3.10\""} jupyter-core = ">=4.12,<5.0.dev0 || >=5.1.dev0" python-dateutil = ">=2.8.2" pyzmq = ">=23.0" @@ -2063,8 +2070,8 @@ jsonpatch = ">=1.33,<2.0" langsmith = ">=0.1.112,<0.2.0" packaging = ">=23.2,<25" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" @@ -2132,8 +2139,8 @@ files = [ httpx = ">=0.23.0,<1" orjson = ">=3.9.14,<4.0.0" pydantic = [ - {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, + {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, ] requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" @@ -2368,6 +2375,9 @@ files = [ {file = "markdown-3.7.tar.gz", hash = "sha256:2ae2471477cfd02dbbf038d5d9bc226d40def84b4fe2986e49b59b6b472bbed2"}, ] +[package.dependencies] +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} + [package.extras] docs = ["mdx-gh-links (>=0.2)", "mkdocs (>=1.5)", "mkdocs-gen-files", "mkdocs-literate-nav", "mkdocs-nature (>=0.6)", "mkdocs-section-index", "mkdocstrings[python]"] testing = ["coverage", "pyyaml"] @@ -2556,21 +2566,6 @@ files = [ {file = "mdurl-0.1.2.tar.gz", hash = "sha256:bb413d29f5eea38f31dd4754dd7377d4465116fb207585f97bf925588687c1ba"}, ] -[[package]] -name = "mean-average-precision" -version = "2021.4.26.0" -description = "Mean Average Precision evaluator for object detection." -optional = false -python-versions = "*" -files = [ - {file = "mean_average_precision-2021.4.26.0-py3-none-any.whl", hash = "sha256:4a4d08e27f016c8e6ffb8bea0687f59eca63c0060543f90c2e1373a48e5500c5"}, - {file = "mean_average_precision-2021.4.26.0.tar.gz", hash = "sha256:20596a0a411fcdd2bdb159636f21f3501de76395fcb8ac3db0b90982b4bdfd7d"}, -] - -[package.dependencies] -numpy = "*" -pandas = "*" - [[package]] name = "mergedeep" version = "1.3.4" @@ -2624,6 +2619,7 @@ files = [ click = ">=7.0" colorama = {version = ">=0.4", markers = "platform_system == \"Windows\""} ghp-import = ">=1.0" +importlib-metadata = {version = ">=4.4", markers = "python_version < \"3.10\""} jinja2 = ">=2.11.1" markdown = ">=3.3.6" markupsafe = ">=2.0.1" @@ -2666,6 +2662,7 @@ files = [ ] [package.dependencies] +importlib-metadata = {version = ">=4.3", markers = "python_version < \"3.10\""} mergedeep = ">=1.3.4" platformdirs = ">=2.2.0" pyyaml = ">=5.1" @@ -2691,13 +2688,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.44" +version = "9.5.45" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.44-py3-none-any.whl", hash = "sha256:47015f9c167d58a5ff5e682da37441fc4d66a1c79334bfc08d774763cacf69ca"}, - {file = "mkdocs_material-9.5.44.tar.gz", hash = "sha256:f3a6c968e524166b3f3ed1fb97d3ed3e0091183b0545cedf7156a2a6804c56c0"}, + {file = "mkdocs_material-9.5.45-py3-none-any.whl", hash = "sha256:a9be237cfd0be14be75f40f1726d83aa3a81ce44808dc3594d47a7a592f44547"}, + {file = "mkdocs_material-9.5.45.tar.gz", hash = "sha256:286489cf0beca4a129d91d59d6417419c63bceed1ce5cd0ec1fc7e1ebffb8189"}, ] [package.dependencies] @@ -2986,6 +2983,7 @@ files = [ beautifulsoup4 = "*" bleach = "!=5.0.0" defusedxml = "*" +importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} jinja2 = ">=3.0" jupyter-core = ">=4.7" jupyterlab-pygments = "*" @@ -3062,21 +3060,20 @@ files = [ [[package]] name = "networkx" -version = "3.4.2" +version = "3.2.1" description = "Python package for creating and manipulating graphs and networks" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "networkx-3.4.2-py3-none-any.whl", hash = "sha256:df5d4365b724cf81b8c6a7312509d0c22386097011ad1abe274afd5e9d3bbc5f"}, - {file = "networkx-3.4.2.tar.gz", hash = "sha256:307c3669428c5362aab27c8a1260aa8f47c4e91d3891f48be0141738d8d053e1"}, + {file = "networkx-3.2.1-py3-none-any.whl", hash = "sha256:f18c69adc97877c42332c170849c96cefa91881c99a7cb3e95b7c659ebdc1ec2"}, + {file = "networkx-3.2.1.tar.gz", hash = "sha256:9f1bb5cf3409bf324e0a722c20bdb4c20ee39bf1c30ce8ae499c8502b0b5e0c6"}, ] [package.extras] -default = ["matplotlib (>=3.7)", "numpy (>=1.24)", "pandas (>=2.0)", "scipy (>=1.10,!=1.11.0,!=1.11.1)"] -developer = ["changelist (==0.5)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] -doc = ["intersphinx-registry", "myst-nb (>=1.1)", "numpydoc (>=1.8.0)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.15)", "sphinx (>=7.3)", "sphinx-gallery (>=0.16)", "texext (>=0.6.7)"] -example = ["cairocffi (>=1.7)", "contextily (>=1.6)", "igraph (>=0.11)", "momepy (>=0.7.2)", "osmnx (>=1.9)", "scikit-learn (>=1.5)", "seaborn (>=0.13)"] -extra = ["lxml (>=4.6)", "pydot (>=3.0.1)", "pygraphviz (>=1.14)", "sympy (>=1.10)"] +default = ["matplotlib (>=3.5)", "numpy (>=1.22)", "pandas (>=1.4)", "scipy (>=1.9,!=1.11.0,!=1.11.1)"] +developer = ["changelist (==0.4)", "mypy (>=1.1)", "pre-commit (>=3.2)", "rtoml"] +doc = ["nb2plots (>=0.7)", "nbconvert (<7.9)", "numpydoc (>=1.6)", "pillow (>=9.4)", "pydata-sphinx-theme (>=0.14)", "sphinx (>=7)", "sphinx-gallery (>=0.14)", "texext (>=0.6.7)"] +extra = ["lxml (>=4.6)", "pydot (>=1.4.2)", "pygraphviz (>=1.11)", "sympy (>=1.10)"] test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] @@ -3582,10 +3579,12 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, ] [[package]] @@ -3748,9 +3747,9 @@ files = [ [package.dependencies] numpy = [ + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -3783,13 +3782,13 @@ xml = ["lxml (>=4.9.2)"] [[package]] name = "pandas-stubs" -version = "2.2.3.241009" +version = "2.2.2.240807" description = "Type annotations for pandas" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "pandas_stubs-2.2.3.241009-py3-none-any.whl", hash = "sha256:3a6f8f142105a42550be677ba741ba532621f4e0acad2155c0e7b2450f114cfa"}, - {file = "pandas_stubs-2.2.3.241009.tar.gz", hash = "sha256:d4ab618253f0acf78a5d0d2bfd6dffdd92d91a56a69bdc8144e5a5c6d25be3b5"}, + {file = "pandas_stubs-2.2.2.240807-py3-none-any.whl", hash = "sha256:893919ad82be4275f0d07bb47a95d08bae580d3fdea308a7acfcb3f02e76186e"}, + {file = "pandas_stubs-2.2.2.240807.tar.gz", hash = "sha256:64a559725a57a449f46225fbafc422520b7410bff9252b661a225b5559192a93"}, ] [package.dependencies] @@ -4347,8 +4346,8 @@ files = [ annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, + {version = ">=4.6.1", markers = "python_version < \"3.13\""}, ] [package.extras] @@ -4516,14 +4515,15 @@ files = [ astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.2", markers = "python_version < \"3.11\""}, {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, + {version = ">=0.2", markers = "python_version < \"3.11\""}, ] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" platformdirs = ">=2.2.0" tomli = {version = ">=1.1.0", markers = "python_version < \"3.11\""} tomlkit = ">=0.10.1" +typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} [package.extras] spelling = ["pyenchant (>=3.2,<4.0)"] @@ -5761,11 +5761,6 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, - {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -5791,53 +5786,45 @@ tests = ["black (>=24.3.0)", "matplotlib (>=3.3.4)", "mypy (>=1.9)", "numpydoc ( [[package]] name = "scipy" -version = "1.14.1" +version = "1.13.1" description = "Fundamental algorithms for scientific computing in Python" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "scipy-1.14.1-cp310-cp310-macosx_10_13_x86_64.whl", hash = "sha256:b28d2ca4add7ac16ae8bb6632a3c86e4b9e4d52d3e34267f6e1b0c1f8d87e389"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d0d2821003174de06b69e58cef2316a6622b60ee613121199cb2852a873f8cf3"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8bddf15838ba768bb5f5083c1ea012d64c9a444e16192762bd858f1e126196d0"}, - {file = "scipy-1.14.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:97c5dddd5932bd2a1a31c927ba5e1463a53b87ca96b5c9bdf5dfd6096e27efc3"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2ff0a7e01e422c15739ecd64432743cf7aae2b03f3084288f399affcefe5222d"}, - {file = "scipy-1.14.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8e32dced201274bf96899e6491d9ba3e9a5f6b336708656466ad0522d8528f69"}, - {file = "scipy-1.14.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8426251ad1e4ad903a4514712d2fa8fdd5382c978010d1c6f5f37ef286a713ad"}, - {file = "scipy-1.14.1-cp310-cp310-win_amd64.whl", hash = "sha256:a49f6ed96f83966f576b33a44257d869756df6cf1ef4934f59dd58b25e0327e5"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_10_13_x86_64.whl", hash = "sha256:2da0469a4ef0ecd3693761acbdc20f2fdeafb69e6819cc081308cc978153c675"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:c0ee987efa6737242745f347835da2cc5bb9f1b42996a4d97d5c7ff7928cb6f2"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:3a1b111fac6baec1c1d92f27e76511c9e7218f1695d61b59e05e0fe04dc59617"}, - {file = "scipy-1.14.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8475230e55549ab3f207bff11ebfc91c805dc3463ef62eda3ccf593254524ce8"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:278266012eb69f4a720827bdd2dc54b2271c97d84255b2faaa8f161a158c3b37"}, - {file = "scipy-1.14.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fef8c87f8abfb884dac04e97824b61299880c43f4ce675dd2cbeadd3c9b466d2"}, - {file = "scipy-1.14.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:b05d43735bb2f07d689f56f7b474788a13ed8adc484a85aa65c0fd931cf9ccd2"}, - {file = "scipy-1.14.1-cp311-cp311-win_amd64.whl", hash = "sha256:716e389b694c4bb564b4fc0c51bc84d381735e0d39d3f26ec1af2556ec6aad94"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:631f07b3734d34aced009aaf6fedfd0eb3498a97e581c3b1e5f14a04164a456d"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:af29a935803cc707ab2ed7791c44288a682f9c8107bc00f0eccc4f92c08d6e07"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2843f2d527d9eebec9a43e6b406fb7266f3af25a751aa91d62ff416f54170bc5"}, - {file = "scipy-1.14.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:eb58ca0abd96911932f688528977858681a59d61a7ce908ffd355957f7025cfc"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:30ac8812c1d2aab7131a79ba62933a2a76f582d5dbbc695192453dae67ad6310"}, - {file = "scipy-1.14.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8f9ea80f2e65bdaa0b7627fb00cbeb2daf163caa015e59b7516395fe3bd1e066"}, - {file = "scipy-1.14.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:edaf02b82cd7639db00dbff629995ef185c8df4c3ffa71a5562a595765a06ce1"}, - {file = "scipy-1.14.1-cp312-cp312-win_amd64.whl", hash = "sha256:2ff38e22128e6c03ff73b6bb0f85f897d2362f8c052e3b8ad00532198fbdae3f"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:1729560c906963fc8389f6aac023739ff3983e727b1a4d87696b7bf108316a79"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:4079b90df244709e675cdc8b93bfd8a395d59af40b72e339c2287c91860deb8e"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:e0cf28db0f24a38b2a0ca33a85a54852586e43cf6fd876365c86e0657cfe7d73"}, - {file = "scipy-1.14.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:0c2f95de3b04e26f5f3ad5bb05e74ba7f68b837133a4492414b3afd79dfe540e"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b99722ea48b7ea25e8e015e8341ae74624f72e5f21fc2abd45f3a93266de4c5d"}, - {file = "scipy-1.14.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5149e3fd2d686e42144a093b206aef01932a0059c2a33ddfa67f5f035bdfe13e"}, - {file = "scipy-1.14.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4f5a7c49323533f9103d4dacf4e4f07078f360743dec7f7596949149efeec06"}, - {file = "scipy-1.14.1-cp313-cp313-win_amd64.whl", hash = "sha256:baff393942b550823bfce952bb62270ee17504d02a1801d7fd0719534dfb9c84"}, - {file = "scipy-1.14.1.tar.gz", hash = "sha256:5a275584e726026a5699459aa72f828a610821006228e841b94275c4a7c08417"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:20335853b85e9a49ff7572ab453794298bcf0354d8068c5f6775a0eabf350aca"}, + {file = "scipy-1.13.1-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:d605e9c23906d1994f55ace80e0125c587f96c020037ea6aa98d01b4bd2e222f"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cfa31f1def5c819b19ecc3a8b52d28ffdcc7ed52bb20c9a7589669dd3c250989"}, + {file = "scipy-1.13.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26264b282b9da0952a024ae34710c2aff7d27480ee91a2e82b7b7073c24722f"}, + {file = "scipy-1.13.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:eccfa1906eacc02de42d70ef4aecea45415f5be17e72b61bafcfd329bdc52e94"}, + {file = "scipy-1.13.1-cp310-cp310-win_amd64.whl", hash = "sha256:2831f0dc9c5ea9edd6e51e6e769b655f08ec6db6e2e10f86ef39bd32eb11da54"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:27e52b09c0d3a1d5b63e1105f24177e544a222b43611aaf5bc44d4a0979e32f9"}, + {file = "scipy-1.13.1-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:54f430b00f0133e2224c3ba42b805bfd0086fe488835effa33fa291561932326"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e89369d27f9e7b0884ae559a3a956e77c02114cc60a6058b4e5011572eea9299"}, + {file = "scipy-1.13.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a78b4b3345f1b6f68a763c6e25c0c9a23a9fd0f39f5f3d200efe8feda560a5fa"}, + {file = "scipy-1.13.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:45484bee6d65633752c490404513b9ef02475b4284c4cfab0ef946def50b3f59"}, + {file = "scipy-1.13.1-cp311-cp311-win_amd64.whl", hash = "sha256:5713f62f781eebd8d597eb3f88b8bf9274e79eeabf63afb4a737abc6c84ad37b"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5d72782f39716b2b3509cd7c33cdc08c96f2f4d2b06d51e52fb45a19ca0c86a1"}, + {file = "scipy-1.13.1-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:017367484ce5498445aade74b1d5ab377acdc65e27095155e448c88497755a5d"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:949ae67db5fa78a86e8fa644b9a6b07252f449dcf74247108c50e1d20d2b4627"}, + {file = "scipy-1.13.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ade0e53bc1f21358aa74ff4830235d716211d7d077e340c7349bc3542e884"}, + {file = "scipy-1.13.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2ac65fb503dad64218c228e2dc2d0a0193f7904747db43014645ae139c8fad16"}, + {file = "scipy-1.13.1-cp312-cp312-win_amd64.whl", hash = "sha256:cdd7dacfb95fea358916410ec61bbc20440f7860333aee6d882bb8046264e949"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:436bbb42a94a8aeef855d755ce5a465479c721e9d684de76bf61a62e7c2b81d5"}, + {file = "scipy-1.13.1-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:8335549ebbca860c52bf3d02f80784e91a004b71b059e3eea9678ba994796a24"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d533654b7d221a6a97304ab63c41c96473ff04459e404b83275b60aa8f4b7004"}, + {file = "scipy-1.13.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:637e98dcf185ba7f8e663e122ebf908c4702420477ae52a04f9908707456ba4d"}, + {file = "scipy-1.13.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a014c2b3697bde71724244f63de2476925596c24285c7a637364761f8710891c"}, + {file = "scipy-1.13.1-cp39-cp39-win_amd64.whl", hash = "sha256:392e4ec766654852c25ebad4f64e4e584cf19820b980bc04960bca0b0cd6eaa2"}, + {file = "scipy-1.13.1.tar.gz", hash = "sha256:095a87a0312b08dfd6a6155cbbd310a8c51800fc931b8c0b84003014b874ed3c"}, ] [package.dependencies] -numpy = ">=1.23.5,<2.3" +numpy = ">=1.22.4,<2.3" [package.extras] -dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy (==1.10.0)", "pycodestyle", "pydevtool", "rich-click", "ruff (>=0.0.292)", "types-psutil", "typing_extensions"] -doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.13.1)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0,<=7.3.7)", "sphinx-design (>=0.4.0)"] -test = ["Cython", "array-api-strict (>=2.0)", "asv", "gmpy2", "hypothesis (>=6.30)", "meson", "mpmath", "ninja", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] +dev = ["cython-lint (>=0.12.2)", "doit (>=0.36.0)", "mypy", "pycodestyle", "pydevtool", "rich-click", "ruff", "types-psutil", "typing_extensions"] +doc = ["jupyterlite-pyodide-kernel", "jupyterlite-sphinx (>=0.12.0)", "jupytext", "matplotlib (>=3.5)", "myst-nb", "numpydoc", "pooch", "pydata-sphinx-theme (>=0.15.2)", "sphinx (>=5.0.0)", "sphinx-design (>=0.4.0)"] +test = ["array-api-strict", "asv", "gmpy2", "hypothesis (>=6.30)", "mpmath", "pooch", "pytest", "pytest-cov", "pytest-timeout", "pytest-xdist", "scikit-umfpack", "threadpoolctl"] [[package]] name = "secretstorage" @@ -6155,13 +6142,13 @@ files = [ [[package]] name = "tifffile" -version = "2024.9.20" +version = "2024.8.30" description = "Read and write TIFF files" optional = false -python-versions = ">=3.10" +python-versions = ">=3.9" files = [ - {file = "tifffile-2024.9.20-py3-none-any.whl", hash = "sha256:c54dc85bc1065d972cb8a6ffb3181389d597876aa80177933459733e4ed243dd"}, - {file = "tifffile-2024.9.20.tar.gz", hash = "sha256:3fbf3be2f995a7051a8ae05a4be70c96fc0789f22ed6f1c4104c973cf68a640b"}, + {file = "tifffile-2024.8.30-py3-none-any.whl", hash = "sha256:8bc59a8f02a2665cd50a910ec64961c5373bee0b8850ec89d3b7b485bf7be7ad"}, + {file = "tifffile-2024.8.30.tar.gz", hash = "sha256:2c9508fe768962e30f87def61819183fb07692c258cb175b3c114828368485a4"}, ] [package.dependencies] @@ -7365,5 +7352,5 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" -python-versions = "^3.10" -content-hash = "129137f8229158ac7672919df1684a260f74db22517d4d40c905f801f2950f46" +python-versions = "^3.9" +content-hash = "de2354d1c01d11017a742eb0bf826b08aaaeec5e84f62f0e2101c3bc685b7a6f" diff --git a/pyproject.toml b/pyproject.toml index 52c68035..881b6973 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,10 +24,10 @@ packages = [{include = "docling"}] ###################### # actual dependencies: ###################### -python = "^3.10" +python = "^3.9" pydantic = "^2.0.0" docling-core = "^2.4.0" -docling-ibm-models = "^2.0.3" +docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" pypdfium2 = "^4.30.0" @@ -36,10 +36,10 @@ huggingface_hub = ">=0.23,<1" requests = "^2.32.3" easyocr = "^1.7" tesserocr = { version = "^2.7.1", optional = true } -docling-parse = "^2.0.2" +docling-parse = "^2.0.5" certifi = ">=2024.7.4" rtree = "^1.3.0" -scipy = "^1.14.1" +scipy = "^1.6.0" pyarrow = "^16.1.0" typer = "^0.12.5" python-docx = "^1.1.2" @@ -81,6 +81,12 @@ langchain-huggingface = "^0.0.3" langchain-milvus = "^0.1.4" langchain-text-splitters = "^0.2.4" +[tool.poetry.group.constraints.dependencies] +numpy = [ + { version = "^2.1.0", markers = 'python_version >= "3.13"' }, + { version = "^1.24.4", markers = 'python_version < "3.13"' }, +] + [tool.poetry.group.mac_intel] optional = true @@ -107,13 +113,13 @@ build-backend = "poetry.core.masonry.api" [tool.black] line-length = 88 -target-version = ["py310"] +target-version = ["py39"] include = '\.pyi?$' [tool.isort] profile = "black" line_length = 88 -py_version=311 +py_version=39 [tool.mypy] pretty = true From eb64f6d368c5a13179b527ef0d755682c63b9b21 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 20 Nov 2024 15:36:51 +0000 Subject: [PATCH 10/40] chore: bump version to 2.7.0 [skip ci] --- CHANGELOG.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fafb1ad5..933aba35 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [v2.7.0](https://github.com/DS4SD/docling/releases/tag/v2.7.0) - 2024-11-20 + +### Feature + +* Add support for `ocrmac` OCR engine on macOS ([#276](https://github.com/DS4SD/docling/issues/276)) ([`6efa96c`](https://github.com/DS4SD/docling/commit/6efa96c983fc509b2c7b35a4a25a714284f2f782)) + +### Fix + +* Python3.9 support ([#396](https://github.com/DS4SD/docling/issues/396)) ([`7b013ab`](https://github.com/DS4SD/docling/commit/7b013abcf31ba49e2141dfd408bc8c23e8d87d91)) +* Propagate document limits to converter ([#388](https://github.com/DS4SD/docling/issues/388)) ([`32ebf55`](https://github.com/DS4SD/docling/commit/32ebf55e3338dd22f9a23c55595f15835794d961)) + ## [v2.6.0](https://github.com/DS4SD/docling/releases/tag/v2.6.0) - 2024-11-19 ### Feature diff --git a/pyproject.toml b/pyproject.toml index 881b6973..70d8e4c3 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.6.0" # DO NOT EDIT, updated automatically +version = "2.7.0" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 97d571af97fd85a4fcb06d65f535ccfcef6ab6a5 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Thu, 21 Nov 2024 13:59:45 +0100 Subject: [PATCH 11/40] chore: add downloads in README, security policy and update ci actions (#401) * add security policy Signed-off-by: Michele Dolfi * update deprecated actions Signed-off-by: Michele Dolfi * add comment about licenses for new dependencies Signed-off-by: Michele Dolfi * add pypi downloads badge Signed-off-by: Michele Dolfi * add citation file Signed-off-by: Michele Dolfi --------- Signed-off-by: Michele Dolfi --- .github/SECURITY.md | 23 +++++++++++++++++++++++ .github/actions/setup-poetry/action.yml | 2 +- .github/workflows/cd.yml | 2 +- .github/workflows/checks.yml | 2 +- .github/workflows/pypi.yml | 2 +- CITATION.cff | 15 +++++++++++++++ CONTRIBUTING.md | 4 ++++ README.md | 1 + 8 files changed, 47 insertions(+), 4 deletions(-) create mode 100644 .github/SECURITY.md create mode 100644 CITATION.cff diff --git a/.github/SECURITY.md b/.github/SECURITY.md new file mode 100644 index 00000000..419e13db --- /dev/null +++ b/.github/SECURITY.md @@ -0,0 +1,23 @@ +# Security and Disclosure Information Policy for the Docling Project + +The Docling team and community take security bugs seriously. We appreciate your efforts to responsibly disclose your findings, and will make every effort to acknowledge your contributions. + +## Reporting a Vulnerability + +If you think you've identified a security issue in an Docling project repository, please DO NOT report the issue publicly via the GitHub issue tracker, etc. + +Instead, send an email with as many details as possible to [deepsearch-core@zurich.ibm.com](mailto:deepsearch-core@zurich.ibm.com). This is a private mailing list for the maintainers team. + +Please do not create a public issue. + +## Security Vulnerability Response + +Each report is acknowledged and analyzed by the core maintainers within 3 working days. + +Any vulnerability information shared with core maintainers stays within the Docling project and will not be disseminated to other projects unless it is necessary to get the issue fixed. + +After the initial reply to your report, the security team will keep you informed of the progress towards a fix and full announcement, and may ask for additional information or guidance. + +## Security Alerts + +We will send announcements of security vulnerabilities and steps to remediate on the [Docling announcements](https://github.com/DS4SD/docling/discussions/categories/announcements). diff --git a/.github/actions/setup-poetry/action.yml b/.github/actions/setup-poetry/action.yml index e9ce6977..0bdd730c 100644 --- a/.github/actions/setup-poetry/action.yml +++ b/.github/actions/setup-poetry/action.yml @@ -10,7 +10,7 @@ runs: - name: Install poetry run: pipx install poetry==1.8.3 shell: bash - - uses: actions/setup-python@v4 + - uses: actions/setup-python@v5 with: python-version: ${{ inputs.python-version }} cache: 'poetry' diff --git a/.github/workflows/cd.yml b/.github/workflows/cd.yml index 9a2bf714..1f0502dc 100644 --- a/.github/workflows/cd.yml +++ b/.github/workflows/cd.yml @@ -15,7 +15,7 @@ jobs: outputs: TARGET_TAG_V: ${{ steps.version_check.outputs.TRGT_VERSION }} steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 with: fetch-depth: 0 # for fetching tags, required for semantic-release - uses: ./.github/actions/setup-poetry diff --git a/.github/workflows/checks.yml b/.github/workflows/checks.yml index 6cd0d38b..1cd08f2c 100644 --- a/.github/workflows/checks.yml +++ b/.github/workflows/checks.yml @@ -8,7 +8,7 @@ jobs: matrix: python-version: ['3.9', '3.10', '3.11', '3.12'] steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - name: Install tesseract run: sudo apt-get update && sudo apt-get install -y tesseract-ocr tesseract-ocr-eng tesseract-ocr-fra tesseract-ocr-deu tesseract-ocr-spa libleptonica-dev libtesseract-dev pkg-config - name: Set TESSDATA_PREFIX diff --git a/.github/workflows/pypi.yml b/.github/workflows/pypi.yml index 0d206b21..395f34cd 100644 --- a/.github/workflows/pypi.yml +++ b/.github/workflows/pypi.yml @@ -15,7 +15,7 @@ jobs: build-and-publish: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v3 + - uses: actions/checkout@v4 - uses: ./.github/actions/setup-poetry - name: Build and publish run: poetry publish --build --no-interaction --username=__token__ --password=${{ secrets.PYPI_TOKEN }} diff --git a/CITATION.cff b/CITATION.cff new file mode 100644 index 00000000..2a7ca30e --- /dev/null +++ b/CITATION.cff @@ -0,0 +1,15 @@ +# This CITATION.cff file was generated with cffinit. +# Visit https://bit.ly/cffinit to generate yours today! + +cff-version: 1.2.0 +title: Docling +message: 'If you use Docling, please consider citing as below.' +type: software +authors: + - name: Docling Team +identifiers: + - type: url + value: 'https://arxiv.org/abs/2408.09869' + description: 'arXiv:2408.09869' +repository-code: 'https://github.com/DS4SD/docling' +license: MIT diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 1adacc23..770b923f 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -71,6 +71,10 @@ local git repository using the following command: git commit -s ``` +### New dependencies + +This project strictly adheres to using dependencies that are compatible with the MIT license to ensure maximum flexibility and permissiveness in its usage and distribution. As a result, dependencies licensed under restrictive terms such as GPL, LGPL, AGPL, or similar are explicitly excluded. These licenses impose additional requirements and limitations that are incompatible with the MIT license's minimal restrictions, potentially affecting derivative works and redistribution. By maintaining this policy, the project ensures simplicity and freedom for both developers and users, avoiding conflicts with stricter copyleft provisions. + ## Communication diff --git a/README.md b/README.md index 893b604f..f236fc61 100644 --- a/README.md +++ b/README.md @@ -20,6 +20,7 @@ [![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://pydantic.dev) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit) [![License MIT](https://img.shields.io/github/license/DS4SD/docling)](https://opensource.org/licenses/MIT) +[![PyPI Downloads](https://static.pepy.tech/badge/docling/month)](https://pepy.tech/projects/docling) Docling parses documents and exports them to the desired format with ease and speed. From 7a45b92078b3a9fdd8f0650002eddc03e9d780af Mon Sep 17 00:00:00 2001 From: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:23:04 +0100 Subject: [PATCH 12/40] docs: add DocETL, Kotaemon, spaCy integrations; minor docs improvements (#408) Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --- docs/concepts/index.md | 2 +- docs/index.md | 3 ++- docs/integrations/.template.md | 9 +++++++++ docs/integrations/data_prep_kit.md | 10 +++++----- docs/integrations/docetl.md | 9 +++++++++ docs/integrations/kotaemon.md | 9 +++++++++ docs/integrations/llamaindex.md | 18 ++++++++---------- docs/integrations/spacy.md | 9 +++++++++ mkdocs.yml | 4 ++++ 9 files changed, 56 insertions(+), 17 deletions(-) create mode 100644 docs/integrations/.template.md create mode 100644 docs/integrations/docetl.md create mode 100644 docs/integrations/kotaemon.md create mode 100644 docs/integrations/spacy.md diff --git a/docs/concepts/index.md b/docs/concepts/index.md index 54f24b64..b48345e2 100644 --- a/docs/concepts/index.md +++ b/docs/concepts/index.md @@ -1 +1 @@ -Use the navigation on the left to browse some core Docling concepts. +Use the navigation on the left to browse through some core Docling concepts. diff --git a/docs/index.md b/docs/index.md index efafc2b0..0224f29b 100644 --- a/docs/index.md +++ b/docs/index.md @@ -7,13 +7,14 @@ [![arXiv](https://img.shields.io/badge/arXiv-2408.09869-b31b1b.svg)](https://arxiv.org/abs/2408.09869) [![PyPI version](https://img.shields.io/pypi/v/docling)](https://pypi.org/project/docling/) -![Python](https://img.shields.io/badge/python-3.10%20%7C%203.11%20%7C%203.12-blue) +[![PyPI - Python Version](https://img.shields.io/pypi/pyversions/docling)](https://pypi.org/project/docling/) [![Poetry](https://img.shields.io/endpoint?url=https://python-poetry.org/badge/v0.json)](https://python-poetry.org/) [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black) [![Imports: isort](https://img.shields.io/badge/%20imports-isort-%231674b1?style=flat&labelColor=ef8336)](https://pycqa.github.io/isort/) [![Pydantic v2](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/pydantic/pydantic/main/docs/badge/v2.json)](https://pydantic.dev) [![pre-commit](https://img.shields.io/badge/pre--commit-enabled-brightgreen?logo=pre-commit&logoColor=white)](https://github.com/pre-commit/pre-commit) [![License MIT](https://img.shields.io/github/license/DS4SD/docling)](https://opensource.org/licenses/MIT) +[![PyPI Downloads](https://static.pepy.tech/badge/docling/month)](https://pepy.tech/projects/docling) Docling parses documents and exports them to the desired format with ease and speed. diff --git a/docs/integrations/.template.md b/docs/integrations/.template.md new file mode 100644 index 00000000..60fb4d8d --- /dev/null +++ b/docs/integrations/.template.md @@ -0,0 +1,9 @@ +Docling is available as a plugin for [EXAMPLE](https://example.com). + +- 💻 [GitHub][github] +- 📖 [Docs][docs] +- 📦 [PyPI][pypi] + +[github]: https://github.com/... +[docs]: https://... +[pypi]: https://pypi.org/project/... diff --git a/docs/integrations/data_prep_kit.md b/docs/integrations/data_prep_kit.md index 5885e8ed..c9b3755a 100644 --- a/docs/integrations/data_prep_kit.md +++ b/docs/integrations/data_prep_kit.md @@ -1,13 +1,13 @@ ## Get started -Docling is used by the [Data Prep Kit \[↗\]](https://ibm.github.io/data-prep-kit/) open-source toolkit for preparing unstructured data for LLM application development ranging from laptop scale to datacenter scale. +Docling is used by the [Data Prep Kit](https://ibm.github.io/data-prep-kit/) open-source toolkit for preparing unstructured data for LLM application development ranging from laptop scale to datacenter scale. Below you find the Data Prep Kit modules powered by Docling. ## PDF ingestion to Parquet -- 💻 [GitHub \[↗\]](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/pdf2parquet) -- 📖 [API docs \[↗\]](https://ibm.github.io/data-prep-kit/transforms/language/pdf2parquet/python/) +- 💻 [PDF-to-Parquet GitHub](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/pdf2parquet) +- 📖 [PDF-to-Parquet Docs](https://ibm.github.io/data-prep-kit/transforms/language/pdf2parquet/python/) ## Document chunking -- 💻 [GitHub \[↗\]](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/doc_chunk) -- 📖 [API docs \[↗\]](https://ibm.github.io/data-prep-kit/transforms/language/doc_chunk/python/) +- 💻 [Doc Chunking GitHub](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/doc_chunk) +- 📖 [Doc Chunking Docs](https://ibm.github.io/data-prep-kit/transforms/language/doc_chunk/python/) diff --git a/docs/integrations/docetl.md b/docs/integrations/docetl.md new file mode 100644 index 00000000..a03a4044 --- /dev/null +++ b/docs/integrations/docetl.md @@ -0,0 +1,9 @@ +Docling is available as a file conversion method in [DocETL](https://github.com/ucbepic/docetl): + +- 💻 [DocETL GitHub][github] +- 📖 [DocETL Docs][docs] +- 📦 [DocETL PyPI][pypi] + +[github]: https://github.com/ucbepic/docetl +[docs]: https://ucbepic.github.io/docetl/ +[pypi]: https://pypi.org/project/docetl/ diff --git a/docs/integrations/kotaemon.md b/docs/integrations/kotaemon.md new file mode 100644 index 00000000..14cfc130 --- /dev/null +++ b/docs/integrations/kotaemon.md @@ -0,0 +1,9 @@ +Docling is available in [Kotaemon](https://cinnamon.github.io/kotaemon/) as the `DoclingReader` loader: + +- 💻 [Kotaemon GitHub][github] +- 📖 [DoclingReader Docs][docs] +- ⚙️ [Docling Setup in Kotaemon][setup] + +[github]: https://github.com/Cinnamon/kotaemon +[docs]: https://cinnamon.github.io/kotaemon/reference/loaders/docling_loader/ +[setup]: https://cinnamon.github.io/kotaemon/development/?h=docling#setup-multimodal-document-parsing-ocr-table-parsing-figure-extraction diff --git a/docs/integrations/llamaindex.md b/docs/integrations/llamaindex.md index 41eb6e3d..dc61b34f 100644 --- a/docs/integrations/llamaindex.md +++ b/docs/integrations/llamaindex.md @@ -1,8 +1,8 @@ ## Get started -Docling is available as an official [LlamaIndex \[↗\]](https://docs.llamaindex.ai/) extension. +Docling is available as an official [LlamaIndex](https://docs.llamaindex.ai/) extension. -To get started, check out the [step-by-step guide in LlamaIndex \[↗\]](https://docs.llamaindex.ai/en/stable/examples/data_connectors/DoclingReaderDemo/). +To get started, check out the [step-by-step guide in LlamaIndex](https://docs.llamaindex.ai/en/stable/examples/data_connectors/DoclingReaderDemo/). ## Components @@ -10,16 +10,14 @@ To get started, check out the [step-by-step guide in LlamaIndex \[↗\]](https:/ Reads document files and uses Docling to populate LlamaIndex `Document` objects — either serializing Docling's data model (losslessly, e.g. as JSON) or exporting to a simplified format (lossily, e.g. as Markdown). -- 💻 [GitHub \[↗\]](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-docling) -- 📖 [API docs \[↗\]](https://docs.llamaindex.ai/en/stable/api_reference/readers/docling/) -- 📦 [PyPI \[↗\]](https://pypi.org/project/llama-index-readers-docling/) -- 🦙 [LlamaHub \[↗\]](https://llamahub.ai/l/readers/llama-index-readers-docling) +- 💻 [Docling Reader GitHub](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-docling) +- 📖 [Docling Reader Docs](https://docs.llamaindex.ai/en/stable/api_reference/readers/docling/) +- 📦 [Docling Reader PyPI](https://pypi.org/project/llama-index-readers-docling/) ### Docling Node Parser Reads LlamaIndex `Document` objects populated in Docling's format by Docling Reader and, using its knowledge of the Docling format, parses them to LlamaIndex `Node` objects for downstream usage in LlamaIndex applications, e.g. as chunks for embedding. -- 💻 [GitHub \[↗\]](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/node_parser/llama-index-node-parser-docling) -- 📖 [API docs \[↗\]](https://docs.llamaindex.ai/en/stable/api_reference/node_parser/docling/) -- 📦 [PyPI \[↗\]](https://pypi.org/project/llama-index-node-parser-docling/) -- 🦙 [LlamaHub \[↗\]](https://llamahub.ai/l/node_parser/llama-index-node-parser-docling) +- 💻 [Docling Node Parser GitHub](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/node_parser/llama-index-node-parser-docling) +- 📖 [Docling Node Parser Docs](https://docs.llamaindex.ai/en/stable/api_reference/node_parser/docling/) +- 📦 [Docling Node Parser PyPI](https://pypi.org/project/llama-index-node-parser-docling/) diff --git a/docs/integrations/spacy.md b/docs/integrations/spacy.md new file mode 100644 index 00000000..82a20890 --- /dev/null +++ b/docs/integrations/spacy.md @@ -0,0 +1,9 @@ +Docling is available in [spaCy](https://spacy.io/) as the "SpaCy Layout" plugin: + +- 💻 [SpacyLayout GitHub][github] +- 📖 [SpacyLayout Docs][docs] +- 📦 [SpacyLayout PyPI][pypi] + +[github]: https://github.com/explosion/spacy-layout +[docs]: https://github.com/explosion/spacy-layout?tab=readme-ov-file#readme +[pypi]: https://pypi.org/project/spacy-layout/ diff --git a/mkdocs.yml b/mkdocs.yml index 44a32039..43012b1c 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -38,6 +38,7 @@ theme: - content.code.annotate - content.code.copy - announce.dismiss + - navigation.footer - navigation.tabs - navigation.indexes # <= if set, each "section" can have its own page, if index.md is used - navigation.instant @@ -85,7 +86,10 @@ nav: - Integrations: - Integrations: integrations/index.md - "Data Prep Kit": integrations/data_prep_kit.md + - "DocETL": integrations/docetl.md + - "Kotaemon": integrations/kotaemon.md - "LlamaIndex 🦙": integrations/llamaindex.md + - "spaCy": integrations/spacy.md # - "LangChain 🦜🔗": integrations/langchain.md # - API reference: # - API reference: api_reference/index.md From 2a1d3fd2213c3f8becf5c5478b019012a5a0791b Mon Sep 17 00:00:00 2001 From: "Peter W. J. Staar" <91719829+PeterStaar-IBM@users.noreply.github.com> Date: Thu, 21 Nov 2024 17:28:53 +0100 Subject: [PATCH 13/40] chore: update the README (#409) * chore: update the README Signed-off-by: Peter Staar * Update README.md Co-authored-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Signed-off-by: Peter W. J. Staar <91719829+PeterStaar-IBM@users.noreply.github.com> * chore: update the docs Signed-off-by: Peter Staar --------- Signed-off-by: Peter Staar Signed-off-by: Peter W. J. Staar <91719829+PeterStaar-IBM@users.noreply.github.com> Co-authored-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --- README.md | 2 +- docs/index.md | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index f236fc61..1c350cd4 100644 --- a/README.md +++ b/README.md @@ -26,7 +26,7 @@ Docling parses documents and exports them to the desired format with ease and sp ## Features -* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, Images, HTML, AsciiDoc, Markdown) and exports to Markdown and JSON +* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON * 📑 Advanced PDF document understanding including page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](https://ds4sd.github.io/docling/concepts/docling_document/) representation format * 🤖 Easy integration with LlamaIndex 🦙 & LangChain 🦜🔗 for powerful RAG / QA applications diff --git a/docs/index.md b/docs/index.md index 0224f29b..27c926f4 100644 --- a/docs/index.md +++ b/docs/index.md @@ -20,7 +20,7 @@ Docling parses documents and exports them to the desired format with ease and sp ## Features -* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, Images, HTML, AsciiDoc, Markdown) and exports to Markdown and JSON +* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON * 📑 Advanced PDF document understanding incl. page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](./concepts/docling_document.md) representation format * 🤖 Easy integration with LlamaIndex 🦙 & LangChain 🦜🔗 for powerful RAG / QA applications From d7072b4b56227756eb2c7abd3a6e7387eeefe7c1 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Fri, 22 Nov 2024 08:23:11 +0100 Subject: [PATCH 14/40] fix: force pydantic < 2.10.0 (#407) Signed-off-by: Michele Dolfi --- poetry.lock | 4 ++-- pyproject.toml | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/poetry.lock b/poetry.lock index c1771bbd..c117db24 100644 --- a/poetry.lock +++ b/poetry.lock @@ -3581,10 +3581,10 @@ files = [ numpy = [ {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] [[package]] @@ -7353,4 +7353,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "de2354d1c01d11017a742eb0bf826b08aaaeec5e84f62f0e2101c3bc685b7a6f" +content-hash = "6772098f9951e636c03d958b81f7df3ae0e8746be558fd031aeaa67f9bb45a79" diff --git a/pyproject.toml b/pyproject.toml index 70d8e4c3..c0907b22 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,7 +25,7 @@ packages = [{include = "docling"}] # actual dependencies: ###################### python = "^3.9" -pydantic = "^2.0.0" +pydantic = ">=2.0.0,<2.10" docling-core = "^2.4.0" docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" From d0a118047804765b1b8532e72e08272e678c0c93 Mon Sep 17 00:00:00 2001 From: Maxim Lysak <101627549+maxmnemonic@users.noreply.github.com> Date: Tue, 26 Nov 2024 14:44:43 +0100 Subject: [PATCH 15/40] fix: Fixes for wordx (#432) * fixes for referencing drawing blip in wordx Signed-off-by: Maksym Lysak * Added safety try-except when trying to load pillow image from a docx blob. Added explicit dependency on lxml. Signed-off-by: Maksym Lysak * Added test for word file with embedded emf images, re-generated full tests for docx, eased up dependency on lxml Signed-off-by: Maksym Lysak * Updated lxml dependency version Signed-off-by: Maksym Lysak --------- Signed-off-by: Maksym Lysak Co-authored-by: Maksym Lysak --- docling/backend/msword_backend.py | 31 +- poetry.lock | 245 ++++---- pyproject.toml | 1 + tests/data/docx/test_emf_docx.docx | Bin 0 -> 426097 bytes .../docling_v2/tablecell.docx.itxt | 10 + .../docling_v2/tablecell.docx.json | 392 +++++++++++++ .../groundtruth/docling_v2/tablecell.docx.md | 11 + .../docling_v2/test_emf_docx.docx.itxt | 8 + .../docling_v2/test_emf_docx.docx.json | 144 +++++ .../docling_v2/test_emf_docx.docx.md | 13 + .../groundtruth/docling_v2/word_sample.json | 1 + .../groundtruth/docling_v2/word_sample.md | 45 ++ .../groundtruth/docling_v2/word_sample.yaml | 546 ++++++++++++++++++ 13 files changed, 1295 insertions(+), 152 deletions(-) create mode 100644 tests/data/docx/test_emf_docx.docx create mode 100644 tests/data/groundtruth/docling_v2/tablecell.docx.itxt create mode 100644 tests/data/groundtruth/docling_v2/tablecell.docx.json create mode 100644 tests/data/groundtruth/docling_v2/tablecell.docx.md create mode 100644 tests/data/groundtruth/docling_v2/test_emf_docx.docx.itxt create mode 100644 tests/data/groundtruth/docling_v2/test_emf_docx.docx.json create mode 100644 tests/data/groundtruth/docling_v2/test_emf_docx.docx.md create mode 100644 tests/data/groundtruth/docling_v2/word_sample.json create mode 100644 tests/data/groundtruth/docling_v2/word_sample.md create mode 100644 tests/data/groundtruth/docling_v2/word_sample.yaml diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 089e94c2..496bdb7b 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -14,7 +14,8 @@ from docling_core.types.doc import ( TableData, ) from lxml import etree -from PIL import Image +from lxml.etree import XPath +from PIL import Image, UnidentifiedImageError from docling.backend.abstract_backend import DeclarativeDocumentBackend from docling.datamodel.base_models import InputFormat @@ -132,8 +133,14 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): def walk_linear(self, body, docx_obj, doc) -> DoclingDocument: for element in body: tag_name = etree.QName(element).localname + # Check for Inline Images (blip elements) - drawing_blip = element.xpath(".//a:blip") + namespaces = { + "a": "http://schemas.openxmlformats.org/drawingml/2006/main", + "r": "http://schemas.openxmlformats.org/officeDocument/2006/relationships", + } + xpath_expr = XPath(".//a:blip", namespaces=namespaces) + drawing_blip = xpath_expr(element) # Check for Tables if element.tag.endswith("tbl"): @@ -210,7 +217,6 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): paragraph = docx.text.paragraph.Paragraph(element, docx_obj) if paragraph.text is None: - # _log.warn(f"paragraph has text==None") return text = paragraph.text.strip() # if len(text)==0 # keep empty paragraphs, they seperate adjacent lists! @@ -502,10 +508,17 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): image_data = get_docx_image(element, drawing_blip) image_bytes = BytesIO(image_data) # Open the BytesIO object with PIL to create an Image - pil_image = Image.open(image_bytes) - doc.add_picture( - parent=self.parents[self.level], - image=ImageRef.from_pil(image=pil_image, dpi=72), - caption=None, - ) + try: + pil_image = Image.open(image_bytes) + doc.add_picture( + parent=self.parents[self.level], + image=ImageRef.from_pil(image=pil_image, dpi=72), + caption=None, + ) + except (UnidentifiedImageError, OSError) as e: + _log.warning("Warning: image cannot be loaded by Pillow") + doc.add_picture( + parent=self.parents[self.level], + caption=None, + ) return diff --git a/poetry.lock b/poetry.lock index c117db24..b08ea4e7 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2212,157 +2212,111 @@ files = [ [[package]] name = "lxml" -version = "5.3.0" +version = "4.9.4" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=3.6" +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" files = [ - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, - {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, - {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, - {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, - {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, - {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, - {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, - {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, - {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, - {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, - {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, - {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, - {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, - {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, - {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, - {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, - {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, - {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, - {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, - {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, - {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, - {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, - {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, - {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, - {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, - {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, - {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, - {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, - {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, - {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, - {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, - {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, - {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, - {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, - {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, - {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, - {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, - {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, - {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, - {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, - {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, - {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, - {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, - {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, - {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, - {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, + {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, + {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, + {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, + {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, + {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, + {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, + {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, + {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, + {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, + {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, + {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, + {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, + {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, + {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, + {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, + {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, + {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, + {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, + {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, + {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, + {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, + {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, + {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, + {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, + {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, + {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, + {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, + {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, + {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, + {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, + {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, + {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, + {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, + {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, + {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, + {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, + {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, + {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, + {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, + {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, + {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, + {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, + {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, + {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, + {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, + {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, + {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, + {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, + {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, + {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, + {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, + {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, + {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, + {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, + {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, + {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, + {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, + {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, + {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, + {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, + {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, + {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, + {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, + {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, + {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, + {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, + {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, + {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, + {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, + {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, + {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, + {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, + {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] -html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (>=3.0.11)"] +source = ["Cython (==0.29.37)"] [[package]] name = "markdown" @@ -5761,6 +5715,11 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, + {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -7353,4 +7312,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "6772098f9951e636c03d958b81f7df3ae0e8746be558fd031aeaa67f9bb45a79" +content-hash = "d824c81c132de19beea5d5e395d70c1b9566bf5b938fec3d12ad478b953fd639" diff --git a/pyproject.toml b/pyproject.toml index c0907b22..51323bf8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -48,6 +48,7 @@ beautifulsoup4 = "^4.12.3" pandas = "^2.1.4" marko = "^2.1.2" openpyxl = "^3.1.5" +lxml = ">=4.0.0,<6.0.0" ocrmac = { version = "^1.0.0", markers = "sys_platform == 'darwin'", optional = true } [tool.poetry.group.dev.dependencies] diff --git a/tests/data/docx/test_emf_docx.docx b/tests/data/docx/test_emf_docx.docx new file mode 100644 index 0000000000000000000000000000000000000000..12ade78333faeee803b168f7304ae3142354d01b GIT binary patch literal 426097 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

P)p0-8>mtjA(MO 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

(s1YR{`7$N9ZXd^%~$M57uZ(v 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 OUljCJneh4T^uGXaDaGRe literal 0 HcmV?d00001 diff --git a/tests/data/groundtruth/docling_v2/tablecell.docx.itxt b/tests/data/groundtruth/docling_v2/tablecell.docx.itxt new file mode 100644 index 00000000..f972efcd --- /dev/null +++ b/tests/data/groundtruth/docling_v2/tablecell.docx.itxt @@ -0,0 +1,10 @@ +item-0 at level 0: unspecified: group _root_ + item-1 at level 1: list: group list + item-2 at level 2: list_item: Hello world1 + item-3 at level 2: list_item: Hello2 + item-4 at level 1: paragraph: + item-5 at level 1: paragraph: Some text before + item-6 at level 1: table with [3x3] + item-7 at level 1: paragraph: + item-8 at level 1: paragraph: + item-9 at level 1: paragraph: Some text after \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/tablecell.docx.json b/tests/data/groundtruth/docling_v2/tablecell.docx.json new file mode 100644 index 00000000..d811cc86 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/tablecell.docx.json @@ -0,0 +1,392 @@ +{ + "schema_name": "DoclingDocument", + "version": "1.0.0", + "name": "tablecell", + "origin": { + "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "binary_hash": 1111850039819445035, + "filename": "tablecell.docx" + }, + "furniture": { + "self_ref": "#/furniture", + "children": [], + "name": "_root_", + "label": "unspecified" + }, + "body": { + "self_ref": "#/body", + "children": [ + { + "$ref": "#/groups/0" + }, + { + "$ref": "#/texts/2" + }, + { + "$ref": "#/texts/3" + }, + { + "$ref": "#/tables/0" + }, + { + "$ref": "#/texts/4" + }, + { + "$ref": "#/texts/5" + }, + { + "$ref": "#/texts/6" + } + ], + "name": "_root_", + "label": "unspecified" + }, + "groups": [ + { + "self_ref": "#/groups/0", + "parent": { + "$ref": "#/body" + }, + "children": [ + { + "$ref": "#/texts/0" + }, + { + "$ref": "#/texts/1" + } + ], + "name": "list", + "label": "list" + } + ], + "texts": [ + { + "self_ref": "#/texts/0", + "parent": { + "$ref": "#/groups/0" + }, + "children": [], + "label": "list_item", + "prov": [], + "orig": "Hello world1", + "text": "Hello world1", + "enumerated": false, + "marker": "-" + }, + { + "self_ref": "#/texts/1", + "parent": { + "$ref": "#/groups/0" + }, + "children": [], + "label": "list_item", + "prov": [], + "orig": "Hello2", + "text": "Hello2", + "enumerated": false, + "marker": "-" + }, + { + "self_ref": "#/texts/2", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "", + "text": "" + }, + { + "self_ref": "#/texts/3", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Some text before", + "text": "Some text before" + }, + { + "self_ref": "#/texts/4", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "", + "text": "" + }, + { + "self_ref": "#/texts/5", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "", + "text": "" + }, + { + "self_ref": "#/texts/6", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Some text after", + "text": "Some text after" + } + ], + "pictures": [], + "tables": [ + { + "self_ref": "#/tables/0", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "table", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "data": { + "table_cells": [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "Tab1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "Tab2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "Tab3", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "A", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "B", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "C", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "D", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "E", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "F", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + "num_rows": 3, + "num_cols": 3, + "grid": [ + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "Tab1", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "Tab2", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 0, + "end_row_offset_idx": 1, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "Tab3", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "A", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "B", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 1, + "end_row_offset_idx": 2, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "C", + "column_header": false, + "row_header": false, + "row_section": false + } + ], + [ + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 0, + "end_col_offset_idx": 1, + "text": "D", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 1, + "end_col_offset_idx": 2, + "text": "E", + "column_header": false, + "row_header": false, + "row_section": false + }, + { + "row_span": 1, + "col_span": 1, + "start_row_offset_idx": 2, + "end_row_offset_idx": 3, + "start_col_offset_idx": 2, + "end_col_offset_idx": 3, + "text": "F", + "column_header": false, + "row_header": false, + "row_section": false + } + ] + ] + } + } + ], + "key_value_items": [], + "pages": {} +} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/tablecell.docx.md b/tests/data/groundtruth/docling_v2/tablecell.docx.md new file mode 100644 index 00000000..f7a3de6c --- /dev/null +++ b/tests/data/groundtruth/docling_v2/tablecell.docx.md @@ -0,0 +1,11 @@ +- Hello world1 +- Hello2 + +Some text before + +| Tab1 | Tab2 | Tab3 | +|--------|--------|--------| +| A | B | C | +| D | E | F | + +Some text after \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test_emf_docx.docx.itxt b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.itxt new file mode 100644 index 00000000..220b5533 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.itxt @@ -0,0 +1,8 @@ +item-0 at level 0: unspecified: group _root_ + item-1 at level 1: paragraph: Test with three images in unusual formats + item-2 at level 1: paragraph: Raster in emf: + item-3 at level 1: picture + item-4 at level 1: paragraph: Vector in emf: + item-5 at level 1: picture + item-6 at level 1: paragraph: Raster in webp: + item-7 at level 1: picture \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test_emf_docx.docx.json b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.json new file mode 100644 index 00000000..6418a215 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.json @@ -0,0 +1,144 @@ +{ + "schema_name": "DoclingDocument", + "version": "1.0.0", + "name": "test_emf_docx", + "origin": { + "mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", + "binary_hash": 17745489605737899558, + "filename": "test_emf_docx.docx" + }, + "furniture": { + "self_ref": "#/furniture", + "children": [], + "name": "_root_", + "label": "unspecified" + }, + "body": { + "self_ref": "#/body", + "children": [ + { + "$ref": "#/texts/0" + }, + { + "$ref": "#/texts/1" + }, + { + "$ref": "#/pictures/0" + }, + { + "$ref": "#/texts/2" + }, + { + "$ref": "#/pictures/1" + }, + { + "$ref": "#/texts/3" + }, + { + "$ref": "#/pictures/2" + } + ], + "name": "_root_", + "label": "unspecified" + }, + "groups": [], + "texts": [ + { + "self_ref": "#/texts/0", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Test with three images in unusual formats", + "text": "Test with three images in unusual formats" + }, + { + "self_ref": "#/texts/1", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Raster in emf:", + "text": "Raster in emf:" + }, + { + "self_ref": "#/texts/2", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Vector in emf:", + "text": "Vector in emf:" + }, + { + "self_ref": "#/texts/3", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "paragraph", + "prov": [], + "orig": "Raster in webp:", + "text": "Raster in webp:" + } + ], + "pictures": [ + { + "self_ref": "#/pictures/0", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "picture", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "annotations": [] + }, + { + "self_ref": "#/pictures/1", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "picture", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "annotations": [] + }, + { + "self_ref": "#/pictures/2", + "parent": { + "$ref": "#/body" + }, + "children": [], + "label": "picture", + "prov": [], + "captions": [], + "references": [], + "footnotes": [], + "image": { + "mimetype": "image/png", + "dpi": 72, + "size": { + "width": 400.0, + "height": 400.0 + }, + "uri": "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAZAAAAGQCAIAAAAP3aGbAAEAAElEQVR4nOxdd3wcxdl+3pnda+rNttxwxQUwpoPpBEwnQOglQKgJJUA+agIESEKAUBM6AUINPbQApkPoHWOMAfduyeq6tjvzfn/M3umkO0l3p5ML6Pntzz7d7czOzs48+87bBhjAAAYwgAEMYAADGMAABjCAAQxgAAMYwAAGMIABDGAAAxjAAAYwgAEMYAADWCdBa7sBA1g7qK2t3XDDDTfZZJMNN9xw0KBBZWVltm07jhMOh+fPnz9r1qwPP/xw9uzZzLy2WzqAAQzgp4pRo0adeeaZzz777IoVK7TW3D1aWlrefffdU049pbi4eG23egADGMBPAEQdEvRuu+1277331tXVpbKS7h7Jcz777LM999yzXxuZ2s4BDGAAP2nssMMOzzzzjOu6PchTGZFkrvb29nPOOaewreqVpCiBwl53AOs1BkbDjxlDhw79/e9/f8IJJwSDwfxqYGZDGUqpk0466b777iOi7BVbRFRRUTFs6LBx48eNGzdu2NBhVdVVVVVVFRUVlmVprZVSjuNEIpGFCxfOnz9/4cKFS5YsmTNnjpEE82vzAAYwgPUP++2335w5c4yspLTqWWPVg5CV/NzQ0DBhwoRsLj18+PD99tvvuuuue+ONNxYtWtTe3p79FV3XXbFixYwZM6644orp06eXl5en1jwgcP3EMfD4f5y4+OKL//jHP9q2nZRTCjLV77vvvksuuSQUCvn9/mAwGAqFgsFgMBj0+/2BQKC4uLi8vHznnXfeZJNNBg0a1PfLAZg3b94LL7zw9NNPv/fee7FYDH27kQGpbQADWLcQDAbvuuuuPISpbKC1bm1tDYfD0WjUcZz8pLacLpf88Omnn/7617+urKw0t0l5Ye0+mgEMYACdEAqFHnzwQWZWSvUrlawtfPvtt7/97W8HDx7c5cYNGQ0Q1o8eA4/wxwOfz3fnnXced9xxXNBl4DqIRYsWffnll7Nnz/7yyy+/++67uXPnNjc3a62TJwgh0kuZbuGBVeH6jB/ngP5p4i9/+ctFF11kJBH8ZPybYrHYqlWr5s6dO3v27G+++eaTTz75/vvvV69enTwh2Q8DhPUjwI9/QP9EcMABBzzxxBOWZSExJ38ihNUFrusuWbzkm9nfvP/++++///5XX31VX1+fKnIOENZ6jZ/cgP7xYciQIdOmTbvpppuGDx/eZTb+BAmrC1YsX/HVzK8+//zz995775NPPlm2bNnabtEA+oSf+oBej5AqHQQCgUmTJu2www4/+9nPttpqq6FDhyZPS+WsHggrHo8vX758/vz5DQ0Nfr9/yJAh48aNKysr67/2r3WsWLHik08+mTFjxrvvvjt79uxIJGK+HxC71iMMENb6hMGDB0+bNm333XffdtttN9poI7/fn0clc+bMefzxx5977rlvv/22ra3N6Kr9fv/QoUOnT59+yimnbL755oVu+LqFeDz+7bffvv3226+99trHH3+8dOnStd2iAQzgR4QhQ4YccsghDz300JIlS/riE7Bs2bILLrggXYxK1XaFQqErrrjCcZy+XGg9wvLlyx977LGjjz56+PDh6X0y4A8xgAF0iy5zY+TIkUcdddQjjzyyfPny1DnWJZtCrzAnv/zyy+PGjUteCCkLRiISQqRe/aSTTvrpcJbBqlWrHn300aOPPnrEiBFdnsgAYa07GHgS6xwqKip+9rOfHX300TvssEN1dXVB6rzpppsuvvjicDhsph8nVDacsCemnmy+vO66684999ws62fm+vr65cuXz5s3b+XKlatWrWppadFaE1EgECgvL6+urh45cuTo0aOrqqpKS0u7lF3rjJDahvr6+rfffvs///nPiy++WF9fv3YbNoABrKOwLGvatGnXXXfdDz/8UFjZ4eqrr05lhFTBqgeP8CFDhixdurRXqeSll166+OKLd9111xEjRti23fM9lpSUTJw48cADD7zmmmvefvvtlpaWwt5pH9FFdF2wYMGtt9664447GmeRAQzgp4tUBhkzZsy55577/nvvF3AVlpx7t956a3fzrdcolj//+c8ZK49EIq+++uppp522wQYbdFdtrz0ghNhwww1//etfz5gxI6d0DmsYjuO8//7755577pgxY7p7ggMYwI8ftm3vvvvuDz744OrVqws+zQxbvfXWWz1kwhJEEkREgoQAERFEJ8LaZZdduijL2traHnzwwW222aa7OvNQ+hDRpptueu211y5cuLDg/VBANDQ0PPLII/vtt19RUVGXmx3Qcw3gx4whQ4aceuqp7733Xr9OsMbGxs0226y7NhCEBWGDCFLAEiQgCEKkTr9hw4atXLnS1Ka1fuyxx7pUmD5X8yMs82HYsGEXXnjh3Llz+7Vb+o7PPvvszDPPHDJkSJe7zv6WBzCA9QNTp07929/+tmRxn7wTeodmZjYq8y7mvxRIwA+IEmGV+nxEElJ0kbBKS0vNxjlffvnlgQcemH47hSKs1CLV1dWXXnppl9zz6yCWLFly7bXXTpkyJacBMIABrB/YeeedH3300aSaWSmVq3dCDtD89ddfG3+r7hmEANpl4/Kn/7rrHptvAAhISRIiAQDlZeWzv5l91113VVVVZbyp7jVg+ROWwYQJEx5++GHu33RbBUBra+vjjz++9957+3y+HEbDAAawbsK27X322ef555/vUKjrTnvV9NNEOv7449GZUEx7CIAgACUhedWxo1r/s0N4xvY7TqgEQJIgOhUJhUK77rprD3dnTpMQggQswAYsQAKCQAQSBEmQBIsgJUiCCBZIpleS2shkcphjjjlmwYIF/dRFhcUbr79xwAEHDNDWANZXhEKhI4444p133lnzk+fLL780mwlmEHyIAAyuDDz95y34hc352Sktj2+/w9hKACSQqx4mhbAsCB+kDxnyUKVAAqLTwjOjaJb6eeONN16xfMX6ko/wvffeO/LIIwOBQH5jZgC9YsDBpPAIBoOHH374WWed1YPOu5/AzER0//33t7W1dXfGBhXBey7aeLdNBUeiRCSkkJYFkGBmRh5BwAoCzOB4CFRT4i8tt6urqKQkELB9QX8gFnOaGpubW9y6pviSBifKGgB37xbQIQwSMfPXX3+9zbbbDB8+fMyYMWar6gkTJtQOqS0rXxfjtLfbbrvtttvu448/vvXWWx9//PH29va13aIfGwZMG4WEz+c76KCDzj777G233XZttaG5uXmbbbaZM2cOUic/SBPAutKmRy7Yevo2kbgO2wgQ2KHyA34/76WvlvsADbhZXEIATGACNAAMLvdvt2H5lhtVbLNxxbhit6pCBkMxAglIkgIM7bqu5voW37d1vje/WfXBpys/m9Wy2lGARUILzUzMaUPREBan5VEIBAIjRowYM2bMlClTpkyZMmHChA033HAdzDPx+eef33LLLY888kg4HF7bbfnxYICwCgMp5T777HPeeeftuOOOa7clL7744r777sudY24IpIlJ44+Hj7v02Oq43WKzD7EoiMlfesbNS255YVl2hEUgAAwGAVtPLD9h9+G7b1o7ckirJaIEF+yDImgGCRhxTWsIhmAQwwIsuKroy+/cB5+ve/idFasiUZIESGZFnakpnbAoJXFoEoFAYOjQoZtuuumWW2653XbbTZw4sba2tq+dWDh8+umnf/nLX5555hmlFAZS2fQZA4RVAOy6664XXHDBHnvsIYTgTNF5awzhcPikk0565JFHzJ8dzSBmjY1qS/9788YjfC1cPYzam3R7EwkSAd9tL7T85uYFRJRN/mABaGCz8RUXHDJq/638IV8croqF/LavBOTjooCwbIBg+IqZtQa7ml0ZiZATV067cFyypEbw82/b/vCvhS993gzpJx3vcqFk4w1tZezS9PbW1tZOnjx5++2332qrrbbccstUb6m1iBkzZlx99dWvv/762m7Ieo8BwuoTpkyZcuGFFx566KGpuYmxxgnr+++//+ijj954440PP/xw1qxZ6c1gMBh/OWHyhceEdFTJ2slu/XxubxCCpI0PvpO7nTc7ojS6UWKZWpgARkVAXHzUpGP3r6guibhtMV1U5q+uFv4yIAS2IaMgNlckQYCANpUyxcJaxXQkItpaKOYAimy0hsWl9628+dklTF0vnEpY3d14zwQ7ePDgLbfccvr06bvuuuvEiRNTQx27Y8D+g/G8/etf//rll1+abwakrTwwQFh5YvDgweecc85pp52Wqj1Zk+KV67qzZ89+5ZVXZsyY8cEHHzQ3N/d8fmWp9eFNW40bFHP8NXbtiMjK72TLakEQhDjVTj/7k3fmNhkbXXpZAgTDBW84ouiG0yfsvVmJq5vikFbpSLuyHEIQC9IWIAAHxDArRmgoxbEo4lFub+FYWMfjxI4kDbaYfVrYVjDMqvTUGxbd9coiMhZG7r33cp3nwWBw4sSJO++88x577LH11lsXKgdGHmhra7vvvvuuu+66BQsWoPuhMkBk3WGAsHKAeSX6fL7jjz/+vPPOS6aXWpMIh8OfffbZyy+//Oqrr37xxRfRaLRLC9HNcJ++2ZD/XjlBqEYuHy0GDXYaFqBuhYAGkbSC1z5Wf/6/5pGndsowkZh529Hl914xcWK1ww5H/bZVM9gKVZISACCMEp7ALsAghuvq5iYdbuZ4WCiHtAJpAoOItID0w/Y5jn/WPP2/r5qffn/Z69+uBoBkC/oNI0eO3HXXXQ844IAdd9yxpqamfy/WDZYtW3b11Vf/85//NGbEjL29Ntq1HmCAsHLDz372s8suu2zNa9Zd1/3qq6+eeuqpZ599dtasWal78KWiB8I6e9+hN5w+AnB48CSEAhxtcBYtsNkFKQG9oLFkl999uXB13KMMQcQAiEkAGlpPHVH0yO+nThwWh9OupQ/DRumyclIkXQILSAJrQINdRNud5iYVbUc8JllJJpKsSUMrKQAptS75eoV8/rPVr7678rMfWpojql+7rjsMGzZszz33PPDAA7fffvvkhtJrEh9++OFFF130xhtvoJuUZANIxwBhZYvhw4f/4Q9/OPHEEy3LWpNLv+++++655557+qmnP/r4I8dxej2/O83IVceNvvDoKiX9onY8kWCOxpYv9jc3KcuF9lsB+9J/11153wIIAgPExAQItgiuWxWwXvrrlltOiCDsKCGpeogaNMKFHXQUmEESBAgX0Vbd0uS2NrMbBysBFqwkjF5MIKAdlH34ZfwfL6767ycrW8MJgyQl1GNrCaNHj54+ffphhx02bdq0NezzGY/H77///j/96U8LFy5Edmq7nzgGCKsnmMlPREcfffTll1/eJSNSv6KhoWHGjBmPPPLIW2+91at+KhXdEdb1J40757AKLUOidiwDsJhXraSVS7XlkioWIrIkHjjk/G8/XNBGIAGtCUho6y87ZtIfjyrnWAPY5tJSMXiEkqWAlJoBDUHQMd1ar5vqEI8LBohBGqwBVwhABp2Y/9Xv4nc9t/TlD1aH3bUjUvUMItpiiy2OOOKIAw88cOzYsebLNaObX7JkyTXXXHPnnXfGYrH+vtb6jgHC6gUbbbTRlVdeedBBB62xK86cOfORRx559NFH582bl0fx7gjrT8eM/P2xg1mGaOg4EBiawu168TwgbIQpsgOvz9T7//GzSMwS0Jo0AGbefEzJm9dMKfY1QENpC9XV1qBhUEFoCWKwCzeq2upVc52tXdKeRZEFgxWRQmjw+7Pk3x6c9ewnq102I06CFbAu0haAysrKPfbY45hjjtlll11MhNOawRtvvHH++ed/8skna+yK6yMGCKtbhEKhM84447zzzlszRqXW1tYZM2bcf//9r776qvGNLqjZm47dtfb+/xsNyRg+ARaxYtJKr1ys2uotKGIJFvAFL31s6ZX3LwYgABA04+YzNj5z/4COtoFFzApYw8bY/nKwAAtAIdIYX72M42GbNREnCIsAhoV2LrrhydW3PT5/WbtjqkxRq3dWw63NRWFmTJ48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VDomTZr05JNP/upXvzLrlEKLWt6Queupuf/9rI0sYbk+6kmqSXRmJ7NGb5YiJhnAuNElGk4P/UcQ4Ta1dBnAtN3GwWGlFpCz18WSJUtee+21PHpp3LhxU6dOzXXw50xY06dP9/l8uZZ64403li1blv35qRaonTcp+26l8ant5sEygaVfYpsxFtxoQimVUNZm2CQiJTFm8nKcTCaSTBNq6EubZQXswFOzrLtfXwHIZCh8SoMFM9u2fcftd5xwwvGZb6qzBpeZt9xyyyeffHLkyJEF5Cxi2BwSEBDinXlN1z+xkCy/kTiQti1QSvs7/k1+k/ngDF+mqmLN0ZH1tDOBZbItdjoymCC7IKWvyORtYPztibkzF7STsLSW2mtPx/nFJcX33HvvHrvv3jNVJU7noqKi22677ec//7knJxbwjUIwRuaWmL7ivm9Xt9rCDOoupNPBPomu8sZyh4DLzCm76iYTXifriY8fH7J7XHMzpKPE4gYJViOLacuxFfndU35hOj6fb6+99sq1VG6EJYT42c9+lus1ADz//PNZPnVKaRODx1Za42p4Xl1rT2VAgBxXUzS+1oJywUhYVQgsoIm6mPwymGCSGukOg5fntgMCmLTd3F5x5aMLWrQGXALrxLsyQT8a4IsuuuiIo47IvluYedKkSbfddlsgEOijcSoJDXZgdK0aku59bdn737okZbq4pJkZHWa41DhKSkZYZnhozGlh4ekWQM+3IcWD1dugKNW2mDEndZoJsqsRk0VHXKGyIfwfzeH7Xl8NCGatTMKdRDZ7o6G+5A+X7DXdW+Vl08nM7PP5brvttrFjx+bxCHoAJ8IlAfHx/PY7ZqzSxWnLIq+vDBm5yYO06hTZalbVnXpPmP5RUrhCTBpZXuTrVkYlwAihs1c1auHzMW+1pS3z8rV48803Fy1alEfBXXbZxbbtnN4HuTVw+PDhm2yySY6tQn19/ZtvvplrKTOOttywjFgvb+o1asmdOixYFbITukn0YDbupaaOmWO0XQIg2KHbZyz/colnwU2vgpknT578u9/9LvveN1OFmffZZ58jjzyyUK9xBjQpRUxMYG503D89sySig6mv7C4fMjcvF414OoV127qc3d8yXKzjZCva6oir/728OapBHod1bC4LaK032WST0047zbupXN4BtbW1v/vd77I/PydIaAu4+dlFXy9wkR9P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YOYszvngwYP/+OOP+qr4K4qycsXKD2Z/sGjRIr9V5718YeKbLl26DEoZlNA2IcCkOYvFsnbtWpFm2OyQgKkAIcAf7hM6uVfIr9nOp7e5DrpUG6AHGNR56rQUeTT1QDX9EXya59aZIZ5zzjlz585tnMp38eLFN9xwgyHpOF0srNPmgTFzVnh4+GeffXbllVc2Yjvvvffevffe6/tWadztkQFUpiWHhTKs4SSyXVUABCuCu7b2CJEQdv/888+dOnU6s9kqIyPj8ssvF5aR2cwRKvNFixb5FQOXlZV9//33H3300Zo1axqobmYWhUqSlJiY2KdPn06dOgldFdTlR68DMMAY+/rrr5teq7aeQwQGwAlkgIFRIfvLneXARMSFQPLJtqE6NORtRfnhMIHzzz9/7ty5CQkJjTjA33//ffz48UYVw0Zs4a/CaTMlNICIVVVVt912m81mGzNmTOArEhECTp48OSIiYtKkSdXV1U2nDAVqB1sN10x9VewN3GASPhNRmzZtPv300zOerTIzM6+//vrjx4/7PgxENG3aNF+2OnTo0Lx58z777LO9e/eKbxqQ44svLRZLYmJi375927VrxxgT7iqzZEFcZDOMLUiSlJ+fH0j11EaCattUbiwXs05V96gHqwr0zyaXXHLJp59+esKuH36xbt26G264oaSkRFy3RmzhL8Rp89j4GkStW7f+4YcfRowYEfhGjBnEDz/8cNttt5WVlQnBYcOpKo2G8ZxwzkNCQubNm3fllVcax9DsuzsVkJ6ePn78+NzcXOPCiu+FC/KSSy759ttvrVarofNMT0//8MMPf/jhB6PLpJlcfPkOAOx2e/fu3fv27du6dWvGmKqqXi8AxpiZubwIS1h5Qj178q7DScVNN9307rvvNq4646ZNm66++urs7OxmmWH8+ThtHhu/c+x27dr9+OOPqampgW/HGNxLly795z//KQwBODk3TDwnQmn99ttvT548udl3cSqAOCFDAPj+++8nT55cUFDgpTtHRFVVe/bsuXjxYuFrr6qqWrp06QcffPDHH394STd9nfTG6yQ8PLxXr169evWKiYkR2/TiI+OzUVLG/I2xNc75559/7qWVPV3wwAMP/Pe//22g5H8D2Llz5xVXXHHw4EHxq6838NTHaUxYggsSExPnz58/bNiwRmxz7dq1EyZMyMrKOkkzeYMKG6cg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344fP75t27Z/9TU+QxAZGTl69OgZb87Iyspq+i3zi927d0+ZMiUyMvKvPtcWnKoYPny44SL9E1BUVPTrr78+9dRTo0ePbt26NQDExsbec889wYYpA0deXt63335755139ujRo+VV3AiEhoaee+65r732WrO8Wryhv2hETZjY2Ni/+nRbcGpjwIABNTU1zT8QTaioqNi0adNrr7125ZVXGno/L4SHh//zn//MyMg4eYdRXl6+cuXKxx9/fNCgQYafqwX1oV27duPHj3/33Xd37dp1Ul9pWVlZDz74oHh7taAFJ0CrVq0MFXIzwul07ty588MPP7z55pt79epluE4bRmho6IQJEzZs2NDsx2OGy+XaunXra6+9dtFFF7Vq1epkX+HTCHa7ffDgwQ8++ODixYt9PZvNHkfevn371H9PjY+PNw6gxSHVghNj1qxZzTUEDx069N133913330pKSlBtV81w263jx8/fsWKFc11VA0gJyfn+++/f+KJJy644IL6rL8zGzabrUePHtdff/2MGTO2bNlilKai5kij8QtVVVesWHHjjTdGRER4HcwJnestTvdgcQZemt69e//xxx9mHVN9IH/lQIuKijZv3rxy5co1a9Zs3bq1pKSk0UeCpsruFotlzJgxd9xxx+jRo/+cGdzx48f37NmTnp6+YcOGrVu35ubmGnU+zzBERUX16NFj0KBBw4cPT0lJ6datm9fbhYIvRR0InE7nsmXLZs6cuXz5cr8dthu9L2opLloPzkDCAoCLL754zpw5hpj4hKioqNi5c+eaNWtWr16dmZmZk5PTjAcj3plGMfgBAwbceOON48ePD6Rwc3OhoqJi7969mzZtSk9P37t3b25ubn5+fiO62J8iiIqK6ty5c5cuXVJSUgYMGNCvX79OnTo10EWZfOrQNxGFhYXff//9+++/v2nTpmbZYAsCxJlJWADQrVu3Rx5+5JJLL/E7M1JVtaSk5MiRI5mZmWvWrElPT8/KylJV1VgAm6+EtvGQmDcYGxs7duzYW2+99eyzz25Kv/JGQFGUkpKSwsLC3bt379y588CBA/v27cvJySkrK3M4HH/mkQSI8PDwqKiobt269erVq1+/fv379e/UuVN8fPxfEmrIyMiYP3/+N998k52d/efvvQVnLGEJxMXF9e/fv0tilzbxbUJCQhRFKSwsLCgoyMvLy8rKKioq8u3WZcwTm9Esr4/+EHHEiBE33XTTFVdcEbg92OxQFKW8vDw7O/vQoUP79u07dOhQQUFBSUlJaWlpYWFheUW5x+0xX6iTAdElLDY2Nj4+vk2bNh07dkxMTOzSpUv79u3j4+Pbtm0bHR39Fzp3CgoKfv7553nz5q1evdrpdP5Vh9GCM5ywgoX5kWhewjL/6rvlDh06XH311ddff31KSordbm+u/TYRNTU1VVVV1VXVRcVF+fn5x48fLywsPH78eHFxcU1NjcvlcjqdDofD5XK53W6Px6MoiqqqbrdbdLJBvVmhJEniX0mSQkNDRcdpo/u0+DUqKio2Jja2Vaxo9fpXn7oGVVU3bNgwd+7cn376qcWkOhXwdySsBgyov4qwBGRZTklJufzyy8eMGTNw4MAAxRN/OUSwTFEUj8fjdrtdLpeiKIgoS7JskUWDaNEUWlivgZyX33jIn4n9+/cvWbLk66+/Xr9+/ZkarDgd8bcjLL8epaAWaMpOvVDfLux2+5AhQy699NJLL720b9++zXUYLTghDhw4sHjx4p9++ikjI6OsrMz4PhD2bAnt/Qn42xHW6YXw8PChQ4deccUVY8eO7dq16199OGcsDh48+Ouvv/7444/p6emlpaV/9eG0oF60ENbpgaioqLPOOmvMmDHnnHNOz549jWLwLWg0FEXZs2fPmjVrFi5cuHr1arM91YJTFi2EdZrBZrMlJSWdc845F1544dChQ/+ecvamoLCwcNOmTb/++uvy5ct37txphPwMiblwyf2lx9iCetFCWKcxWrVqlZKSIsirX79+5opLLTDD7Xbv3r179erVf/zxR3p6+rFjx4w/eWlZhAClhbBOWbQQ1pkASZK6det29tlnp6WlpaamduzQMa513F99UH8xSktLs7KyNmZsXLd+XUZGRlZWliGL9SuLayGs0wIthHWmwWq1JiQkiNy6oUOHJicnJyYmnjrKppMHVVXz8vJ27tyZkZGxYcOGnTt35uTk+KYfNRzvayGsUxwthHWGIzw8vH379oMGDUpJSUlNTe3WrVvr1q3PDP6qqKgoLCw8cODA9u3b9+7du2PHjv379xcXFzdlm82YktWCk4EWwvp7ITY2NiEhoUOHDklJSb169ercuXNiYmKnTp3CwsJkWf7zjydAgSjn3OFwFBcX5+TkHDhwYOfOndu3bz98+HBubm5lZeWfcJwtOEXQQlh/F9RnO4SEhMTExHTs2LFr165du3ZNSkpKSEho1apVVFRUREREREREowuBNQJEVFVVVVZWVlRUlJeXd/jw4cOHDx89ejQ3Nzc3N7e4uLiqqsorq7HFJvpboYWwWuAfkZGRETpat24dryMuLi4yMjI0NNRisdhsNqvVKstySEiIzWYz5wyKjYgGMyLBUFEUt9vtdDo555WVlaWlpeXl5YWFhaWlpaUlpcUlxYWFheXl5ZWVleXl5cXFxebiGWYYDCWECC0up78VWgirBY2BSGwWkGXZCLEZLMYY83g8Ho9HVVVFUUQvbkFeiCjSpBveBWNMFBFrYM7Yopz6u6GFsFrQVDSlGk/DZMQ5P2FQT3xo4ay/Cf4CP2sLzjA0milO6G5vqW7eAi/8P2Gaz6lNRz5TAAAAAElFTkSuQmCC" + }, + "annotations": [] + } + ], + "tables": [], + "key_value_items": [], + "pages": {} +} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/test_emf_docx.docx.md b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.md new file mode 100644 index 00000000..4ebcbf21 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/test_emf_docx.docx.md @@ -0,0 +1,13 @@ +Test with three images in unusual formats + +Raster in emf: + + + +Vector in emf: + + + +Raster in webp: + + \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/word_sample.json b/tests/data/groundtruth/docling_v2/word_sample.json new file mode 100644 index 00000000..42f154f6 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/word_sample.json @@ -0,0 +1 @@ +{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "word_sample", "origin": {"mimetype": "application/vnd.openxmlformats-officedocument.wordprocessingml.document", "binary_hash": 5964280909995938039, "filename": "word_sample.docx"}, "furniture": {"self_ref": "#/furniture", "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "children": [{"$ref": "#/texts/0"}, {"$ref": "#/texts/1"}], "name": "_root_", "label": "unspecified"}, "groups": [{"self_ref": "#/groups/0", "parent": {"$ref": "#/texts/4"}, "children": [{"$ref": "#/texts/6"}, {"$ref": "#/texts/7"}, {"$ref": "#/texts/8"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/1", "parent": {"$ref": "#/texts/4"}, "children": [{"$ref": "#/texts/10"}, {"$ref": "#/texts/11"}, {"$ref": "#/texts/12"}], "name": "list", "label": "list"}, {"self_ref": "#/groups/2", "parent": {"$ref": "#/texts/14"}, "children": [{"$ref": "#/texts/20"}, {"$ref": "#/texts/21"}, {"$ref": "#/texts/22"}], "name": "list", "label": "list"}], "texts": [{"self_ref": "#/texts/0", "parent": {"$ref": "#/body"}, "children": [], "label": "paragraph", "prov": [], "orig": "Summer activities", "text": "Summer activities"}, {"self_ref": "#/texts/1", "parent": {"$ref": "#/body"}, "children": [{"$ref": "#/texts/2"}, {"$ref": "#/pictures/0"}, {"$ref": "#/texts/3"}, {"$ref": "#/texts/4"}], "label": "title", "prov": [], "orig": "Swimming in the lake", "text": "Swimming in the lake"}, {"self_ref": "#/texts/2", "parent": {"$ref": "#/texts/1"}, "children": [], "label": "paragraph", "prov": [], "orig": "Duck", "text": "Duck"}, {"self_ref": "#/texts/3", "parent": {"$ref": "#/texts/1"}, "children": [], "label": "paragraph", "prov": [], "orig": "Figure 1: This is a cute duckling", "text": "Figure 1: This is a cute duckling"}, {"self_ref": "#/texts/4", "parent": {"$ref": "#/texts/1"}, "children": [{"$ref": "#/texts/5"}, {"$ref": "#/groups/0"}, {"$ref": "#/texts/9"}, {"$ref": "#/groups/1"}, {"$ref": "#/texts/13"}, {"$ref": "#/texts/14"}], "label": "section_header", "prov": [], "orig": "Let\u2019s swim!", "text": "Let\u2019s swim!", "level": 1}, {"self_ref": "#/texts/5", "parent": {"$ref": "#/texts/4"}, "children": [], "label": "paragraph", "prov": [], "orig": "To get started with swimming, first lay down in a water and try not to drown:", "text": "To get started with swimming, first lay down in a water and try not to drown:"}, {"self_ref": "#/texts/6", "parent": {"$ref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [], "orig": "You can relax and look around", "text": "You can relax and look around", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/7", "parent": {"$ref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [], "orig": "Paddle about", "text": "Paddle about", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/8", "parent": {"$ref": "#/groups/0"}, "children": [], "label": "list_item", "prov": [], "orig": "Enjoy summer warmth", "text": "Enjoy summer warmth", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/9", "parent": {"$ref": "#/texts/4"}, "children": [], "label": "paragraph", "prov": [], "orig": "Also, don\u2019t forget:", "text": "Also, don\u2019t forget:"}, {"self_ref": "#/texts/10", "parent": {"$ref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [], "orig": "Wear sunglasses", "text": "Wear sunglasses", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/11", "parent": {"$ref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [], "orig": "Don\u2019t forget to drink water", "text": "Don\u2019t forget to drink water", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/12", "parent": {"$ref": "#/groups/1"}, "children": [], "label": "list_item", "prov": [], "orig": "Use sun cream", "text": "Use sun cream", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/13", "parent": {"$ref": "#/texts/4"}, "children": [], "label": "paragraph", "prov": [], "orig": "Hmm, what else\u2026", "text": "Hmm, what else\u2026"}, {"self_ref": "#/texts/14", "parent": {"$ref": "#/texts/4"}, "children": [{"$ref": "#/texts/15"}, {"$ref": "#/texts/16"}, {"$ref": "#/texts/17"}, {"$ref": "#/tables/0"}, {"$ref": "#/texts/18"}, {"$ref": "#/texts/19"}, {"$ref": "#/groups/2"}], "label": "section_header", "prov": [], "orig": "Let\u2019s eat", "text": "Let\u2019s eat", "level": 2}, {"self_ref": "#/texts/15", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "paragraph", "prov": [], "orig": "After we had a good day of swimming in the lake, it\u2019s important to eat something nice", "text": "After we had a good day of swimming in the lake, it\u2019s important to eat something nice"}, {"self_ref": "#/texts/16", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "paragraph", "prov": [], "orig": "I like to eat leaves", "text": "I like to eat leaves"}, {"self_ref": "#/texts/17", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "paragraph", "prov": [], "orig": "Here are some interesting things a respectful duck could eat:", "text": "Here are some interesting things a respectful duck could eat:"}, {"self_ref": "#/texts/18", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "paragraph", "prov": [], "orig": "", "text": ""}, {"self_ref": "#/texts/19", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "paragraph", "prov": [], "orig": "And let\u2019s add another list in the end:", "text": "And let\u2019s add another list in the end:"}, {"self_ref": "#/texts/20", "parent": {"$ref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [], "orig": "Leaves", "text": "Leaves", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/21", "parent": {"$ref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [], "orig": "Berries", "text": "Berries", "enumerated": false, "marker": "-"}, {"self_ref": "#/texts/22", "parent": {"$ref": "#/groups/2"}, "children": [], "label": "list_item", "prov": [], "orig": "Grain", "text": "Grain", "enumerated": false, "marker": "-"}], "pictures": [{"self_ref": "#/pictures/0", "parent": {"$ref": "#/texts/1"}, "children": [], "label": "picture", "prov": [], "captions": [], "references": [], "footnotes": [], "image": {"mimetype": "image/png", "dpi": 72, "size": {"width": 397.0, "height": 397.0}, "uri": "data:image/png;base64,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"}, "annotations": []}], "tables": [{"self_ref": "#/tables/0", "parent": {"$ref": "#/texts/14"}, "children": [], "label": "table", "prov": [], "captions": [], "references": [], "footnotes": [], "data": {"table_cells": [{"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Food", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Calories per portion", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Leaves", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Ash, Elm, Maple", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "50", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Berries", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Blueberry, Strawberry, Cranberry", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "150", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grain", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corn, Buckwheat, Barley", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "200", "column_header": false, "row_header": false, "row_section": false}], "num_rows": 4, "num_cols": 3, "grid": [[{"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Food", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Calories per portion", "column_header": false, "row_header": false, "row_section": false}], [{"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Leaves", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Ash, Elm, Maple", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "50", "column_header": false, "row_header": false, "row_section": false}], [{"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Berries", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Blueberry, Strawberry, Cranberry", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "150", "column_header": false, "row_header": false, "row_section": false}], [{"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Grain", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corn, Buckwheat, Barley", "column_header": false, "row_header": false, "row_section": false}, {"row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "200", "column_header": false, "row_header": false, "row_section": false}]]}}], "key_value_items": [], "pages": {}} \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/word_sample.md b/tests/data/groundtruth/docling_v2/word_sample.md new file mode 100644 index 00000000..9c5a96e0 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/word_sample.md @@ -0,0 +1,45 @@ +Summer activities + +# Swimming in the lake + +Duck + + + +Figure 1: This is a cute duckling + +## Let’s swim! + +To get started with swimming, first lay down in a water and try not to drown: + +- You can relax and look around +- Paddle about +- Enjoy summer warmth + +Also, don’t forget: + +- Wear sunglasses +- Don’t forget to drink water +- Use sun cream + +Hmm, what else… + +### Let’s eat + +After we had a good day of swimming in the lake, it’s important to eat something nice + +I like to eat leaves + +Here are some interesting things a respectful duck could eat: + +| | Food | Calories per portion | +|---------|----------------------------------|------------------------| +| Leaves | Ash, Elm, Maple | 50 | +| Berries | Blueberry, Strawberry, Cranberry | 150 | +| Grain | Corn, Buckwheat, Barley | 200 | + +And let’s add another list in the end: + +- Leaves +- Berries +- Grain \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/word_sample.yaml b/tests/data/groundtruth/docling_v2/word_sample.yaml new file mode 100644 index 00000000..b11146e2 --- /dev/null +++ b/tests/data/groundtruth/docling_v2/word_sample.yaml @@ -0,0 +1,546 @@ +body: + children: + - $ref: '#/texts/0' + - $ref: '#/texts/1' + label: unspecified + name: _root_ + self_ref: '#/body' +furniture: + children: [] + label: unspecified + name: _root_ + self_ref: '#/furniture' +groups: +- children: + - $ref: '#/texts/6' + - $ref: '#/texts/7' + - $ref: '#/texts/8' + label: list + name: list + parent: + $ref: '#/texts/4' + self_ref: '#/groups/0' +- children: + - $ref: '#/texts/10' + - $ref: '#/texts/11' + - $ref: '#/texts/12' + label: list + name: list + parent: + $ref: '#/texts/4' + self_ref: '#/groups/1' +- children: + - $ref: '#/texts/20' + - $ref: '#/texts/21' + - $ref: '#/texts/22' + label: list + name: list + parent: + $ref: '#/texts/14' + self_ref: '#/groups/2' +key_value_items: [] +name: word_sample +origin: + binary_hash: 5964280909995938039 + filename: word_sample.docx + mimetype: application/vnd.openxmlformats-officedocument.wordprocessingml.document +pages: {} +pictures: +- annotations: [] + captions: [] + children: [] + footnotes: [] + image: + dpi: 72 + mimetype: image/png + size: + height: 397.0 + width: 397.0 + uri: data:image/png;base64,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 + label: picture + parent: + $ref: '#/texts/1' + prov: [] + references: [] + self_ref: '#/pictures/0' +schema_name: DoclingDocument +tables: +- captions: [] + children: [] + data: + grid: + - - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 0 + text: '' + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 0 + text: Food + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 0 + text: Calories per portion + - - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 1 + text: Leaves + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 1 + text: Ash, Elm, Maple + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 1 + text: '50' + - - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 2 + text: Berries + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 2 + text: Blueberry, Strawberry, Cranberry + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 2 + text: '150' + - - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 3 + text: Grain + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 3 + text: Corn, Buckwheat, Barley + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 3 + text: '200' + num_cols: 3 + num_rows: 4 + table_cells: + - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 0 + text: '' + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 0 + text: Food + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 1 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 0 + text: Calories per portion + - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 1 + text: Leaves + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 1 + text: Ash, Elm, Maple + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 2 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 1 + text: '50' + - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 2 + text: Berries + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 2 + text: Blueberry, Strawberry, Cranberry + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 3 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 2 + text: '150' + - col_span: 1 + column_header: false + end_col_offset_idx: 1 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 0 + start_row_offset_idx: 3 + text: Grain + - col_span: 1 + column_header: false + end_col_offset_idx: 2 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 1 + start_row_offset_idx: 3 + text: Corn, Buckwheat, Barley + - col_span: 1 + column_header: false + end_col_offset_idx: 3 + end_row_offset_idx: 4 + row_header: false + row_section: false + row_span: 1 + start_col_offset_idx: 2 + start_row_offset_idx: 3 + text: '200' + footnotes: [] + label: table + parent: + $ref: '#/texts/14' + prov: [] + references: [] + self_ref: '#/tables/0' +texts: +- children: [] + label: paragraph + orig: Summer activities + parent: + $ref: '#/body' + prov: [] + self_ref: '#/texts/0' + text: Summer activities +- children: + - $ref: '#/texts/2' + - $ref: '#/pictures/0' + - $ref: '#/texts/3' + - $ref: '#/texts/4' + label: title + orig: Swimming in the lake + parent: + $ref: '#/body' + prov: [] + self_ref: '#/texts/1' + text: Swimming in the lake +- children: [] + label: paragraph + orig: Duck + parent: + $ref: '#/texts/1' + prov: [] + self_ref: '#/texts/2' + text: Duck +- children: [] + label: paragraph + orig: 'Figure 1: This is a cute duckling' + parent: + $ref: '#/texts/1' + prov: [] + self_ref: '#/texts/3' + text: 'Figure 1: This is a cute duckling' +- children: + - $ref: '#/texts/5' + - $ref: '#/groups/0' + - $ref: '#/texts/9' + - $ref: '#/groups/1' + - $ref: '#/texts/13' + - $ref: '#/texts/14' + label: section_header + level: 1 + orig: "Let\u2019s swim!" + parent: + $ref: '#/texts/1' + prov: [] + self_ref: '#/texts/4' + text: "Let\u2019s swim!" +- children: [] + label: paragraph + orig: 'To get started with swimming, first lay down in a water and try not to drown:' + parent: + $ref: '#/texts/4' + prov: [] + self_ref: '#/texts/5' + text: 'To get started with swimming, first lay down in a water and try not to drown:' +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: You can relax and look around + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/6' + text: You can relax and look around +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Paddle about + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/7' + text: Paddle about +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Enjoy summer warmth + parent: + $ref: '#/groups/0' + prov: [] + self_ref: '#/texts/8' + text: Enjoy summer warmth +- children: [] + label: paragraph + orig: "Also, don\u2019t forget:" + parent: + $ref: '#/texts/4' + prov: [] + self_ref: '#/texts/9' + text: "Also, don\u2019t forget:" +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Wear sunglasses + parent: + $ref: '#/groups/1' + prov: [] + self_ref: '#/texts/10' + text: Wear sunglasses +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: "Don\u2019t forget to drink water" + parent: + $ref: '#/groups/1' + prov: [] + self_ref: '#/texts/11' + text: "Don\u2019t forget to drink water" +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Use sun cream + parent: + $ref: '#/groups/1' + prov: [] + self_ref: '#/texts/12' + text: Use sun cream +- children: [] + label: paragraph + orig: "Hmm, what else\u2026" + parent: + $ref: '#/texts/4' + prov: [] + self_ref: '#/texts/13' + text: "Hmm, what else\u2026" +- children: + - $ref: '#/texts/15' + - $ref: '#/texts/16' + - $ref: '#/texts/17' + - $ref: '#/tables/0' + - $ref: '#/texts/18' + - $ref: '#/texts/19' + - $ref: '#/groups/2' + label: section_header + level: 2 + orig: "Let\u2019s eat" + parent: + $ref: '#/texts/4' + prov: [] + self_ref: '#/texts/14' + text: "Let\u2019s eat" +- children: [] + label: paragraph + orig: "After we had a good day of swimming in the lake, it\u2019s important to eat\ + \ something nice" + parent: + $ref: '#/texts/14' + prov: [] + self_ref: '#/texts/15' + text: "After we had a good day of swimming in the lake, it\u2019s important to eat\ + \ something nice" +- children: [] + label: paragraph + orig: I like to eat leaves + parent: + $ref: '#/texts/14' + prov: [] + self_ref: '#/texts/16' + text: I like to eat leaves +- children: [] + label: paragraph + orig: 'Here are some interesting things a respectful duck could eat:' + parent: + $ref: '#/texts/14' + prov: [] + self_ref: '#/texts/17' + text: 'Here are some interesting things a respectful duck could eat:' +- children: [] + label: paragraph + orig: '' + parent: + $ref: '#/texts/14' + prov: [] + self_ref: '#/texts/18' + text: '' +- children: [] + label: paragraph + orig: "And let\u2019s add another list in the end:" + parent: + $ref: '#/texts/14' + prov: [] + self_ref: '#/texts/19' + text: "And let\u2019s add another list in the end:" +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Leaves + parent: + $ref: '#/groups/2' + prov: [] + self_ref: '#/texts/20' + text: Leaves +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Berries + parent: + $ref: '#/groups/2' + prov: [] + self_ref: '#/texts/21' + text: Berries +- children: [] + enumerated: false + label: list_item + marker: '-' + orig: Grain + parent: + $ref: '#/groups/2' + prov: [] + self_ref: '#/texts/22' + text: Grain +version: 1.0.0 From 6666d9ec070650df35a8b156643a78c32dcfefb5 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 26 Nov 2024 15:01:33 +0000 Subject: [PATCH 16/40] chore: bump version to 2.7.1 [skip ci] --- CHANGELOG.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 933aba35..8c802863 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [v2.7.1](https://github.com/DS4SD/docling/releases/tag/v2.7.1) - 2024-11-26 + +### Fix + +* Fixes for wordx ([#432](https://github.com/DS4SD/docling/issues/432)) ([`d0a1180`](https://github.com/DS4SD/docling/commit/d0a118047804765b1b8532e72e08272e678c0c93)) +* Force pydantic < 2.10.0 ([#407](https://github.com/DS4SD/docling/issues/407)) ([`d7072b4`](https://github.com/DS4SD/docling/commit/d7072b4b56227756eb2c7abd3a6e7387eeefe7c1)) + +### Documentation + +* Add DocETL, Kotaemon, spaCy integrations; minor docs improvements ([#408](https://github.com/DS4SD/docling/issues/408)) ([`7a45b92`](https://github.com/DS4SD/docling/commit/7a45b92078b3a9fdd8f0650002eddc03e9d780af)) + ## [v2.7.0](https://github.com/DS4SD/docling/releases/tag/v2.7.0) - 2024-11-20 ### Feature diff --git a/pyproject.toml b/pyproject.toml index 51323bf8..7921904e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.7.0" # DO NOT EDIT, updated automatically +version = "2.7.1" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 29807a2d687896c67ada934c6a626401f5930e50 Mon Sep 17 00:00:00 2001 From: Christoph Auer <60343111+cau-git@users.noreply.github.com> Date: Wed, 27 Nov 2024 13:07:00 +0100 Subject: [PATCH 17/40] fix: Update tests and examples for docling-core 2.5.1 (#449) * Update tests for docling-core 2.5.0 Signed-off-by: Christoph Auer * Add export with referenced images to export_figures example Signed-off-by: Christoph Auer * Fix OCR tests Signed-off-by: Christoph Auer * Revert "Fix OCR tests" This reverts commit 12b575946f51950fcacece99d4d6eb682125d779. Signed-off-by: Christoph Auer * Update lockfile for docling-core 2.5.1 Signed-off-by: Christoph Auer --------- Signed-off-by: Christoph Auer --- docs/examples/export_figures.py | 12 +- poetry.lock | 1401 ++++++++--------- pyproject.toml | 2 +- .../docling_v1/redp5110_sampled.pages.json | 2 +- .../docling_v2/2203.01017v2.doctags.txt | 90 +- .../docling_v2/2206.01062.doctags.txt | 55 +- .../docling_v2/2305.03393v1-pg9.doctags.txt | 5 +- .../docling_v2/2305.03393v1.doctags.txt | 49 +- .../docling_v2/redp5110_sampled.doctags.txt | 84 +- .../docling_v2/redp5110_sampled.pages.json | 2 +- .../groundtruth/docling_v1/ocr_test.json | 2 +- .../docling_v1/ocr_test.pages.json | 2 +- .../groundtruth/docling_v2/ocr_test.json | 2 +- .../docling_v2/ocr_test.pages.json | 2 +- 14 files changed, 828 insertions(+), 882 deletions(-) diff --git a/docs/examples/export_figures.py b/docs/examples/export_figures.py index f910753d..b2ecc43f 100644 --- a/docs/examples/export_figures.py +++ b/docs/examples/export_figures.py @@ -71,10 +71,16 @@ def main(): element.get_image(conv_res.document).save(fp, "PNG") # Save markdown with embedded pictures - content_md = conv_res.document.export_to_markdown(image_mode=ImageRefMode.EMBEDDED) md_filename = output_dir / f"{doc_filename}-with-images.md" - with md_filename.open("w") as fp: - fp.write(content_md) + conv_res.document.save_as_markdown(md_filename, image_mode=ImageRefMode.EMBEDDED) + + # Save markdown with externally referenced pictures + md_filename = output_dir / f"{doc_filename}-with-image-refs.md" + conv_res.document.save_as_markdown(md_filename, image_mode=ImageRefMode.REFERENCED) + + # Save HTML with externally referenced pictures + html_filename = output_dir / f"{doc_filename}-with-image-refs.html" + conv_res.document.save_as_html(html_filename, image_mode=ImageRefMode.REFERENCED) end_time = time.time() - start_time diff --git a/poetry.lock b/poetry.lock index b08ea4e7..32454b75 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.6" +version = "3.11.7" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7510b3ca2275691875ddf072a5b6cd129278d11fe09301add7d292fc8d3432de"}, - {file = "aiohttp-3.11.6-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:bfab0d2c3380c588fc925168533edb21d3448ad76c3eadc360ff963019161724"}, - {file = "aiohttp-3.11.6-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:cf02dba0f342f3a8228f43fae256aafc21c4bc85bffcf537ce4582e2b1565188"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92daedf7221392e7a7984915ca1b0481a94c71457c2f82548414a41d65555e70"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2274a7876e03429e3218589a6d3611a194bdce08c3f1e19962e23370b47c0313"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8a2e1eae2d2f62f3660a1591e16e543b2498358593a73b193006fb89ee37abc6"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:978ec3fb0a42efcd98aae608f58c6cfcececaf0a50b4e86ee3ea0d0a574ab73b"}, - {file = "aiohttp-3.11.6-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a51f87b27d9219ed4e202ed8d6f1bb96f829e5eeff18db0d52f592af6de6bdbf"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:04d1a02a669d26e833c8099992c17f557e3b2fdb7960a0c455d7b1cbcb05121d"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3679d5fcbc7f1ab518ab4993f12f80afb63933f6afb21b9b272793d398303b98"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:a4b24e03d04893b5c8ec9cd5f2f11dc9c8695c4e2416d2ac2ce6c782e4e5ffa5"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d9abdfd35ecff1c95f270b7606819a0e2de9e06fa86b15d9080de26594cf4c23"}, - {file = "aiohttp-3.11.6-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:8b5c3e7928a0ad80887a5eba1c1da1830512ddfe7394d805badda45c03db3109"}, - {file = "aiohttp-3.11.6-cp310-cp310-win32.whl", hash = "sha256:913dd9e9378f3c38aeb5c4fb2b8383d6490bc43f3b427ae79f2870651ae08f22"}, - {file = "aiohttp-3.11.6-cp310-cp310-win_amd64.whl", hash = "sha256:4ac26d482c2000c3a59bf757a77adc972828c9d4177b4bd432a46ba682ca7271"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:26ac4c960ea8debf557357a172b3ef201f2236a462aefa1bc17683a75483e518"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:8b1f13ebc99fb98c7c13057b748f05224ccc36d17dee18136c695ef23faaf4ff"}, - {file = "aiohttp-3.11.6-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4679f1a47516189fab1774f7e45a6c7cac916224c91f5f94676f18d0b64ab134"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:74491fdb3d140ff561ea2128cb7af9ba0a360067ee91074af899c9614f88a18f"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f51e1a90412d387e62aa2d243998c5eddb71373b199d811e6ed862a9f34f9758"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:72ab89510511c3bb703d0bb5504787b11e0ed8be928ed2a7cf1cda9280628430"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6681c9e046d99646e8059266688374a063da85b2e4c0ebfa078cda414905d080"}, - {file = "aiohttp-3.11.6-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a17f8a6d3ab72cbbd137e494d1a23fbd3ea973db39587941f32901bb3c5c350"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:867affc7612a314b95f74d93aac550ce0909bc6f0b6c658cc856890f4d326542"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:00d894ebd609d5a423acef885bd61e7f6a972153f99c5b3ea45fc01fe909196c"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:614c87be9d0d64477d1e4b663bdc5d1534fc0a7ebd23fb08347ab9fd5fe20fd7"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:533ed46cf772f28f3bffae81c0573d916a64dee590b5dfaa3f3d11491da05b95"}, - {file = "aiohttp-3.11.6-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:589884cfbc09813afb1454816b45677e983442e146183143f988f7f5a040791a"}, - {file = "aiohttp-3.11.6-cp311-cp311-win32.whl", hash = "sha256:1da63633ba921669eec3d7e080459d4ceb663752b3dafb2f31f18edd248d2170"}, - {file = "aiohttp-3.11.6-cp311-cp311-win_amd64.whl", hash = "sha256:d778ddda09622e7d83095cc8051698a0084c155a1474bfee9bac27d8613dbc31"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:943a952df105a5305257984e7a1f5c2d0fd8564ff33647693c4d07eb2315446d"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d24ec28b7658970a1f1d98608d67f88376c7e503d9d45ff2ba1949c09f2b358c"}, - {file = "aiohttp-3.11.6-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6720e809a660fdb9bec7c168c582e11cfedce339af0a5ca847a5d5b588dce826"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4252d30da0ada6e6841b325869c7ef5104b488e8dd57ec439892abbb8d7b3615"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f65f43ff01b238aa0b5c47962c83830a49577efe31bd37c1400c3d11d8a32835"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4dc5933f6c9b26404444d36babb650664f984b8e5fa0694540e7b7315d11a4ff"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5bf546ba0c029dfffc718c4b67748687fd4f341b07b7c8f1719d6a3a46164798"}, - {file = "aiohttp-3.11.6-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c351d05bbeae30c088009c0bb3b17dda04fd854f91cc6196c448349cc98f71c3"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:10499079b063576fad1597898de3f9c0a2ce617c19cc7cd6b62fdcff6b408bf7"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:442ee82eda47dd59798d6866ce020fb8d02ea31ac9ac82b3d719ed349e6a9d52"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:86fce9127bc317119b34786d9e9ae8af4508a103158828a535f56d201da6ab19"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:973d26a5537ce5d050302eb3cd876457451745b1da0624cbb483217970e12567"}, - {file = "aiohttp-3.11.6-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:532b8f038a4e001137d3600cea5d3439d1881df41bdf44d0f9651264d562fdf0"}, - {file = "aiohttp-3.11.6-cp312-cp312-win32.whl", hash = "sha256:4863c59f748dbe147da82b389931f2a676aebc9d3419813ed5ca32d057c9cb32"}, - {file = "aiohttp-3.11.6-cp312-cp312-win_amd64.whl", hash = "sha256:5d7f481f82c18ac1f7986e31ba6eea9be8b2e2c86f1ef035b6866179b6c5dd68"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:40f502350496ba4c6820816d3164f8a0297b9aa4e95d910da31beb189866a9df"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:9072669b0bffb40f1f6977d0b5e8a296edc964f9cefca3a18e68649c214d0ce3"}, - {file = "aiohttp-3.11.6-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:518160ecf4e6ffd61715bc9173da0925fcce44ae6c7ca3d3f098fe42585370fb"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f69cc1b45115ac44795b63529aa5caa9674be057f11271f65474127b24fc1ce6"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c6be90a6beced41653bda34afc891617c6d9e8276eef9c183f029f851f0a3c3d"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:00c22fe2486308770d22ef86242101d7b0f1e1093ce178f2358f860e5149a551"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2607ebb783e3aeefa017ec8f34b506a727e6b6ab2c4b037d65f0bc7151f4430a"}, - {file = "aiohttp-3.11.6-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5f761d6819870c2a8537f75f3e2fc610b163150cefa01f9f623945840f601b2c"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e44d1bc6c88f5234115011842219ba27698a5f2deee245c963b180080572aaa2"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:7e0cb6a1b1f499cb2aa0bab1c9f2169ad6913c735b7447e058e0c29c9e51c0b5"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a76b4d4ca34254dca066acff2120811e2a8183997c135fcafa558280f2cc53f3"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:69051c1e45fb18c0ae4d39a075532ff0b015982e7997f19eb5932eb4a3e05c17"}, - {file = "aiohttp-3.11.6-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:aff2ed18274c0bfe0c1d772781c87d5ca97ae50f439729007cec9644ee9b15fe"}, - {file = "aiohttp-3.11.6-cp313-cp313-win32.whl", hash = "sha256:2fbea25f2d44df809a46414a8baafa5f179d9dda7e60717f07bded56300589b3"}, - {file = "aiohttp-3.11.6-cp313-cp313-win_amd64.whl", hash = "sha256:f77bc29a465c0f9f6573d1abe656d385fa673e34efe615bd4acc50899280ee47"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de6123b298d17bca9e53581f50a275b36e10d98e8137eb743ce69ee766dbdfe9"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a10200f705f4fff00e148b7f41e5d1d929c7cd4ac523c659171a0ea8284cd6fb"}, - {file = "aiohttp-3.11.6-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:b7776ef6901b54dd557128d96c71e412eec0c39ebc07567e405ac98737995aad"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6e5c2a55583cd91936baf73d223807bb93ace6eb1fe54424782690f2707162ab"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b032bd6cf7422583bf44f233f4a1489fee53c6d35920123a208adc54e2aba41e"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04fe2d99acbc5cf606f75d7347bf3a027c24c27bc052d470fb156f4cfcea5739"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:84a79c366375c2250934d1238abe5d5ea7754c823a1c7df0c52bf0a2bfded6a9"}, - {file = "aiohttp-3.11.6-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c33cbbe97dc94a34d1295a7bb68f82727bcbff2b284f73ae7e58ecc05903da97"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:19e4fb9ac727834b003338dcdd27dcfe0de4fb44082b01b34ed0ab67c3469fc9"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:a97f6b2afbe1d27220c0c14ea978e09fb4868f462ef3d56d810d206bd2e057a2"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f7afeea03a9bc49be6053dfd30809cd442cc12627d6ca08babd1c1f9e04ccf"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:0d10967600ce5bb69ddcb3e18d84b278efb5199d8b24c3c71a4959c2f08acfd0"}, - {file = "aiohttp-3.11.6-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:60f2f631b9fe7aa321fa0f0ff3f5d8b9f7f9b72afd4eecef61c33cf1cfea5d58"}, - {file = "aiohttp-3.11.6-cp39-cp39-win32.whl", hash = "sha256:4d2b75333deb5c5f61bac5a48bba3dbc142eebbd3947d98788b6ef9cc48628ae"}, - {file = "aiohttp-3.11.6-cp39-cp39-win_amd64.whl", hash = "sha256:8908c235421972a2e02abcef87d16084aabfe825d14cc9a1debd609b3cfffbea"}, - {file = "aiohttp-3.11.6.tar.gz", hash = "sha256:fd9f55c1b51ae1c20a1afe7216a64a88d38afee063baa23c7fce03757023c999"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be"}, + {file = "aiohttp-3.11.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889"}, + {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f"}, + {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2"}, + {file = "aiohttp-3.11.7-cp310-cp310-win32.whl", hash = "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341"}, + {file = "aiohttp-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08"}, + {file = "aiohttp-3.11.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884"}, + {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d"}, + {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720"}, + {file = "aiohttp-3.11.7-cp311-cp311-win32.whl", hash = "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847"}, + {file = "aiohttp-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea"}, + {file = "aiohttp-3.11.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129"}, + {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124"}, + {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd"}, + {file = "aiohttp-3.11.7-cp312-cp312-win32.whl", hash = "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8"}, + {file = "aiohttp-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68"}, + {file = "aiohttp-3.11.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da"}, + {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791"}, + {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52"}, + {file = "aiohttp-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e"}, + {file = "aiohttp-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48"}, + {file = "aiohttp-3.11.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629"}, + {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997"}, + {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949"}, + {file = "aiohttp-3.11.7-cp39-cp39-win32.whl", hash = "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70"}, + {file = "aiohttp-3.11.7-cp39-cp39-win_amd64.whl", hash = "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687"}, + {file = "aiohttp-3.11.7.tar.gz", hash = "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668"}, ] [package.dependencies] @@ -730,37 +730,37 @@ vision = ["Pillow (>=9.4.0)"] [[package]] name = "debugpy" -version = "1.8.8" +version = "1.8.9" description = "An implementation of the Debug Adapter Protocol for Python" optional = false python-versions = ">=3.8" files = [ - {file = "debugpy-1.8.8-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:e59b1607c51b71545cb3496876544f7186a7a27c00b436a62f285603cc68d1c6"}, - {file = "debugpy-1.8.8-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6531d952b565b7cb2fbd1ef5df3d333cf160b44f37547a4e7cf73666aca5d8d"}, - {file = "debugpy-1.8.8-cp310-cp310-win32.whl", hash = "sha256:b01f4a5e5c5fb1d34f4ccba99a20ed01eabc45a4684f4948b5db17a319dfb23f"}, - {file = "debugpy-1.8.8-cp310-cp310-win_amd64.whl", hash = "sha256:535f4fb1c024ddca5913bb0eb17880c8f24ba28aa2c225059db145ee557035e9"}, - {file = "debugpy-1.8.8-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:c399023146e40ae373753a58d1be0a98bf6397fadc737b97ad612886b53df318"}, - {file = "debugpy-1.8.8-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:09cc7b162586ea2171eea055985da2702b0723f6f907a423c9b2da5996ad67ba"}, - {file = "debugpy-1.8.8-cp311-cp311-win32.whl", hash = "sha256:eea8821d998ebeb02f0625dd0d76839ddde8cbf8152ebbe289dd7acf2cdc6b98"}, - {file = "debugpy-1.8.8-cp311-cp311-win_amd64.whl", hash = "sha256:d4483836da2a533f4b1454dffc9f668096ac0433de855f0c22cdce8c9f7e10c4"}, - {file = "debugpy-1.8.8-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:0cc94186340be87b9ac5a707184ec8f36547fb66636d1029ff4f1cc020e53996"}, - {file = "debugpy-1.8.8-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:64674e95916e53c2e9540a056e5f489e0ad4872645399d778f7c598eacb7b7f9"}, - {file = "debugpy-1.8.8-cp312-cp312-win32.whl", hash = "sha256:5c6e885dbf12015aed73770f29dec7023cb310d0dc2ba8bfbeb5c8e43f80edc9"}, - {file = "debugpy-1.8.8-cp312-cp312-win_amd64.whl", hash = "sha256:19ffbd84e757a6ca0113574d1bf5a2298b3947320a3e9d7d8dc3377f02d9f864"}, - {file = "debugpy-1.8.8-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:705cd123a773d184860ed8dae99becd879dfec361098edbefb5fc0d3683eb804"}, - {file = "debugpy-1.8.8-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:890fd16803f50aa9cb1a9b9b25b5ec321656dd6b78157c74283de241993d086f"}, - {file = "debugpy-1.8.8-cp313-cp313-win32.whl", hash = "sha256:90244598214bbe704aa47556ec591d2f9869ff9e042e301a2859c57106649add"}, - {file = "debugpy-1.8.8-cp313-cp313-win_amd64.whl", hash = "sha256:4b93e4832fd4a759a0c465c967214ed0c8a6e8914bced63a28ddb0dd8c5f078b"}, - {file = "debugpy-1.8.8-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:143ef07940aeb8e7316de48f5ed9447644da5203726fca378f3a6952a50a9eae"}, - {file = "debugpy-1.8.8-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f95651bdcbfd3b27a408869a53fbefcc2bcae13b694daee5f1365b1b83a00113"}, - {file = "debugpy-1.8.8-cp38-cp38-win32.whl", hash = "sha256:26b461123a030e82602a750fb24d7801776aa81cd78404e54ab60e8b5fecdad5"}, - {file = "debugpy-1.8.8-cp38-cp38-win_amd64.whl", hash = "sha256:f3cbf1833e644a3100eadb6120f25be8a532035e8245584c4f7532937edc652a"}, - {file = "debugpy-1.8.8-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:53709d4ec586b525724819dc6af1a7703502f7e06f34ded7157f7b1f963bb854"}, - {file = "debugpy-1.8.8-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3a9c013077a3a0000e83d97cf9cc9328d2b0bbb31f56b0e99ea3662d29d7a6a2"}, - {file = "debugpy-1.8.8-cp39-cp39-win32.whl", hash = "sha256:ffe94dd5e9a6739a75f0b85316dc185560db3e97afa6b215628d1b6a17561cb2"}, - {file = "debugpy-1.8.8-cp39-cp39-win_amd64.whl", hash = "sha256:5c0e5a38c7f9b481bf31277d2f74d2109292179081f11108e668195ef926c0f9"}, - {file = "debugpy-1.8.8-py2.py3-none-any.whl", hash = "sha256:ec684553aba5b4066d4de510859922419febc710df7bba04fe9e7ef3de15d34f"}, - {file = "debugpy-1.8.8.zip", hash = "sha256:e6355385db85cbd666be703a96ab7351bc9e6c61d694893206f8001e22aee091"}, + {file = "debugpy-1.8.9-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:cfe1e6c6ad7178265f74981edf1154ffce97b69005212fbc90ca22ddfe3d017e"}, + {file = "debugpy-1.8.9-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ada7fb65102a4d2c9ab62e8908e9e9f12aed9d76ef44880367bc9308ebe49a0f"}, + {file = "debugpy-1.8.9-cp310-cp310-win32.whl", hash = "sha256:c36856343cbaa448171cba62a721531e10e7ffb0abff838004701454149bc037"}, + {file = "debugpy-1.8.9-cp310-cp310-win_amd64.whl", hash = "sha256:17c5e0297678442511cf00a745c9709e928ea4ca263d764e90d233208889a19e"}, + {file = "debugpy-1.8.9-cp311-cp311-macosx_14_0_universal2.whl", hash = "sha256:b74a49753e21e33e7cf030883a92fa607bddc4ede1aa4145172debc637780040"}, + {file = "debugpy-1.8.9-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:62d22dacdb0e296966d7d74a7141aaab4bec123fa43d1a35ddcb39bf9fd29d70"}, + {file = "debugpy-1.8.9-cp311-cp311-win32.whl", hash = "sha256:8138efff315cd09b8dcd14226a21afda4ca582284bf4215126d87342bba1cc66"}, + {file = "debugpy-1.8.9-cp311-cp311-win_amd64.whl", hash = "sha256:ff54ef77ad9f5c425398efb150239f6fe8e20c53ae2f68367eba7ece1e96226d"}, + {file = "debugpy-1.8.9-cp312-cp312-macosx_14_0_universal2.whl", hash = "sha256:957363d9a7a6612a37458d9a15e72d03a635047f946e5fceee74b50d52a9c8e2"}, + {file = "debugpy-1.8.9-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e565fc54b680292b418bb809f1386f17081d1346dca9a871bf69a8ac4071afe"}, + {file = "debugpy-1.8.9-cp312-cp312-win32.whl", hash = "sha256:3e59842d6c4569c65ceb3751075ff8d7e6a6ada209ceca6308c9bde932bcef11"}, + {file = "debugpy-1.8.9-cp312-cp312-win_amd64.whl", hash = "sha256:66eeae42f3137eb428ea3a86d4a55f28da9bd5a4a3d369ba95ecc3a92c1bba53"}, + {file = "debugpy-1.8.9-cp313-cp313-macosx_14_0_universal2.whl", hash = "sha256:957ecffff80d47cafa9b6545de9e016ae8c9547c98a538ee96ab5947115fb3dd"}, + {file = "debugpy-1.8.9-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1efbb3ff61487e2c16b3e033bc8595aea578222c08aaf3c4bf0f93fadbd662ee"}, + {file = "debugpy-1.8.9-cp313-cp313-win32.whl", hash = "sha256:7c4d65d03bee875bcb211c76c1d8f10f600c305dbd734beaed4077e902606fee"}, + {file = "debugpy-1.8.9-cp313-cp313-win_amd64.whl", hash = "sha256:e46b420dc1bea64e5bbedd678148be512442bc589b0111bd799367cde051e71a"}, + {file = "debugpy-1.8.9-cp38-cp38-macosx_14_0_x86_64.whl", hash = "sha256:472a3994999fe6c0756945ffa359e9e7e2d690fb55d251639d07208dbc37caea"}, + {file = "debugpy-1.8.9-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:365e556a4772d7d0d151d7eb0e77ec4db03bcd95f26b67b15742b88cacff88e9"}, + {file = "debugpy-1.8.9-cp38-cp38-win32.whl", hash = "sha256:54a7e6d3014c408eb37b0b06021366ee985f1539e12fe49ca2ee0d392d9ceca5"}, + {file = "debugpy-1.8.9-cp38-cp38-win_amd64.whl", hash = "sha256:8e99c0b1cc7bf86d83fb95d5ccdc4ad0586d4432d489d1f54e4055bcc795f693"}, + {file = "debugpy-1.8.9-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:7e8b079323a56f719977fde9d8115590cb5e7a1cba2fcee0986ef8817116e7c1"}, + {file = "debugpy-1.8.9-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6953b335b804a41f16a192fa2e7851bdcfd92173cbb2f9f777bb934f49baab65"}, + {file = "debugpy-1.8.9-cp39-cp39-win32.whl", hash = "sha256:7e646e62d4602bb8956db88b1e72fe63172148c1e25c041e03b103a25f36673c"}, + {file = "debugpy-1.8.9-cp39-cp39-win_amd64.whl", hash = "sha256:3d9755e77a2d680ce3d2c5394a444cf42be4a592caaf246dbfbdd100ffcf7ae5"}, + {file = "debugpy-1.8.9-py2.py3-none-any.whl", hash = "sha256:cc37a6c9987ad743d9c3a14fa1b1a14b7e4e6041f9dd0c8abf8895fe7a97b899"}, + {file = "debugpy-1.8.9.zip", hash = "sha256:1339e14c7d980407248f09824d1b25ff5c5616651689f1e0f0e51bdead3ea13e"}, ] [[package]] @@ -879,13 +879,13 @@ files = [ [[package]] name = "docling-core" -version = "2.4.0" +version = "2.5.1" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.4.0-py3-none-any.whl", hash = "sha256:dbc6b48d9d8b20800a9eb796d69a33660202c761bf53092697b7b07d28842cc3"}, - {file = "docling_core-2.4.0.tar.gz", hash = "sha256:93f817b0105d564bbd334f8314b359b8a3fb234ec47b5013a020c9cb6ebd2e87"}, + {file = "docling_core-2.5.1-py3-none-any.whl", hash = "sha256:e4a5626520714c25a5ec2f9f7495407e730485257c2272e8467faae7357435bf"}, + {file = "docling_core-2.5.1.tar.gz", hash = "sha256:e9a7c7c46f869b13747436a2ce42df3632af655e1a3af574dfcd114e71dcbb75"}, ] [package.dependencies] @@ -893,7 +893,8 @@ jsonref = ">=1.1.0,<2.0.0" jsonschema = ">=4.16.0,<5.0.0" pandas = ">=2.1.4,<3.0.0" pillow = ">=10.3.0,<11.0.0" -pydantic = ">=2.6.0,<3.0.0" +pydantic = ">=2.6.0,<2.10" +pyyaml = ">=5.1,<7.0.0" tabulate = ">=0.9.0,<0.10.0" [[package]] @@ -922,49 +923,49 @@ tqdm = ">=4.64.0,<5.0.0" [[package]] name = "docling-parse" -version = "2.0.5" +version = "2.1.2" description = "Simple package to extract text with coordinates from programmatic PDFs" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_parse-2.0.5-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:8e35b43fecba970d5d86ab44a176761e868a77195d023ec8a7d9ab40625e8bf2"}, - {file = "docling_parse-2.0.5-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:9be80f15f922eb71c27fa0ea6b028504a1b5d762f580dee99e82ee1edb6534e7"}, - {file = "docling_parse-2.0.5-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:fe372cd1ac79966c166be52e31dd0807cb3ead76a86177a00911cc3d6758a403"}, - {file = "docling_parse-2.0.5-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:6c31c0fac1ed2807d58ed3b61b73fd7a631430d862e1a7f9f1c32838a35578bc"}, - {file = "docling_parse-2.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3a5afd88f39bdec3ea4c91bdf94c53789182d304832532aa8352a17cd6f847a"}, - {file = "docling_parse-2.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d50bb7e2e4509320c41252ec6f07e627ced12f78d8dbd908385aed5c878f2f"}, - {file = "docling_parse-2.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:362f3050e4bba93921054086993050897ba9a40e0ea00e0fd55f5776e14db7fc"}, - {file = "docling_parse-2.0.5-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:a61ca5cd4d3d6336e9ee7ead3184943e6e01e880efb892b64c8796933c3b2965"}, - {file = "docling_parse-2.0.5-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:d7b96bf3f0d8c97fbabc23dcb3c6b7f91b68653c2d04ed74cbb2d7f808165296"}, - {file = "docling_parse-2.0.5-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:07c5caf808dad544a03955ef80411c42193d4c347100e7767eb2e4bf8fcc7c2a"}, - {file = "docling_parse-2.0.5-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:31f941457ba583a078115d4f64e414fb6b08d62c8208e6f42df8b55cd4eb2dd5"}, - {file = "docling_parse-2.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:96439c99a52181b1ac7ddc3754a93a08251103e79bf98d763fb36a0012576969"}, - {file = "docling_parse-2.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5e3e9af47e64e61ecff7e7b4ba648604b1fb4d7d3a75ea6121308a9f7aece4ea"}, - {file = "docling_parse-2.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:9ff6698b75e5e83ea6740b383bbe29d01fc8db7a73625e83e3ab4f24391a0fa1"}, - {file = "docling_parse-2.0.5-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:47a60672148e228b97ed26d6abaf72b4157bb66338be6eaacb9838fe20ae88d3"}, - {file = "docling_parse-2.0.5-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:dee45459109e05f39b0d8be434b56dd44e2d6b79dbd2c2840c7e8a55881d80ae"}, - {file = "docling_parse-2.0.5-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:2a256718a2833fba8da7508548e0421f7f17ec3183c1afc1046a9de1f006ff86"}, - {file = "docling_parse-2.0.5-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:ac195e295b95e6cf5f06b54caabf610952115419dcd1d79f4bfea8b83fa4269f"}, - {file = "docling_parse-2.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d3b2e3bb31e3d6319fb9be8a7b424ddd514a34d5f28fd5e6e83bd45a7f1e5687"}, - {file = "docling_parse-2.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e62d080c1b01a60049384d2f7c3b0484c61f894068a779c19b69034a44d8ed6f"}, - {file = "docling_parse-2.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:7b5ba90818ab3cdfb623d4ce3c65949956e0c3dba6c58ede0d142703ec0b88e5"}, - {file = "docling_parse-2.0.5-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:287c5466f121499d3352bb7f8255d7eb7c39d7d32f9424357d32993f2655322e"}, - {file = "docling_parse-2.0.5-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:33f1ea27629f8ac3956edc27453be06612d9455e80827431545b754be9039edd"}, - {file = "docling_parse-2.0.5-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:8fbf564bf3ae5abc1422a391013048eaa8ead00f4876dd8b2fa7fd6e8538d622"}, - {file = "docling_parse-2.0.5-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:5d1cd612f41a482318cb098904229fec1d55de36e30442063105bd892df7e729"}, - {file = "docling_parse-2.0.5-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:daa8ddb6ad2bc140e735f405cc22a19b99cb493fdb244424cd29544f78c823be"}, - {file = "docling_parse-2.0.5-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18d5acd255c15c3e570f1aeb0c2600905237baf20786df6b01f065f49ad7d413"}, - {file = "docling_parse-2.0.5-cp313-cp313-win_amd64.whl", hash = "sha256:9adac3989b93c13f5030d537a7d49ee9e34564e49995b6dccbbb3d7f5431601a"}, - {file = "docling_parse-2.0.5-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:6b41f153626df3616270478d2b293888b6c79b9dc3fbd9581ca964c5ab246d9c"}, - {file = "docling_parse-2.0.5-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:4b69f47859e34959878874c82e723fff235a47250404a71a996c71b8a44f5664"}, - {file = "docling_parse-2.0.5-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:6943cd9562a298b5eb9e92be0cb5b023eca5290aecbc36411d54e7bb753beb9d"}, - {file = "docling_parse-2.0.5-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:0d1e17826231aaaf7283e20dc47ac7e11d881d663e3ae79c8b552a144a191570"}, - {file = "docling_parse-2.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6a2f68a02267bd5467460330d317956d22a90b3cb63f0c83346a97d018eff161"}, - {file = "docling_parse-2.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1c654e484dc239fc2f588ca5368e8db68931a22eadb97a8d14693e3cfa7d2fe2"}, - {file = "docling_parse-2.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:e839adabfcb5ad9f5c1baf4d5a8acd6c85799a440b7809481c4ab161e8a1d063"}, - {file = "docling_parse-2.0.5-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:7ad900a581f404d219b2f7a87aa17321936e5ae1ae7f3fd4fc30801dab9f36d0"}, - {file = "docling_parse-2.0.5-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:96391070723ac954fcef1841e473f1c875b76208717cb4789694e2c37e46066c"}, - {file = "docling_parse-2.0.5.tar.gz", hash = "sha256:09ac1fff90ab2cb942ad70eee59213a48b737e2df002186e8253b439c0ea9285"}, + {file = "docling_parse-2.1.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:140319e3eac73f9768d35313739891ae637af57fda03eade17d90e2d28ad80eb"}, + {file = "docling_parse-2.1.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:cec968a436ad14e8a45a72fc0e0074750eee28548a14f3c3df5157a68ac958e7"}, + {file = "docling_parse-2.1.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:c84eba992fee49d190cf4834fd44ef4e6549c3f1fcd41b91622114703a7e4a87"}, + {file = "docling_parse-2.1.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:ae02af07f3dd335f56383a83efdc1f6450b7d38e21e1131005dbd341eb38e47d"}, + {file = "docling_parse-2.1.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6fa0731e97d2644ff8a3257ae53208b88be3ddc6a4bc54fbe39e21f8395530f0"}, + {file = "docling_parse-2.1.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d26d60136aab5f4a3a773922a8dcc530334165331660d074cd88dcd5d91206cd"}, + {file = "docling_parse-2.1.2-cp310-cp310-win_amd64.whl", hash = "sha256:76eef41d50017c2fc531face44c1a35bef66095951622617d0f281e35d18e9e0"}, + {file = "docling_parse-2.1.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:7f1ad037d3ac0d80252c493e73b12688ded3ece9bae7954ba62765506c139d21"}, + {file = "docling_parse-2.1.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:9f1360c0558c84f4b6633b0882256f6d621fd9e52179acae39c727a43b48d937"}, + {file = "docling_parse-2.1.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5d505c2d3e9eff4f3064b4d1f017a3c6577b5d8ba55540d558f4899561862956"}, + {file = "docling_parse-2.1.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:58f552f61ac35c02890b03fe59b06552353314c3c1ee2a050c68a8a206ab1b4b"}, + {file = "docling_parse-2.1.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22069dadcfdcebc02e36e27f80d452f1265a5a97d894f2391490bf099bc5432c"}, + {file = "docling_parse-2.1.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68942b31684a021e27b9b07d27ed139911444b33963f7e0b5d2dbda8aaa5cb1"}, + {file = "docling_parse-2.1.2-cp311-cp311-win_amd64.whl", hash = "sha256:d87e3fbf1549cd8bc171240c18584ba8c32f83963b5af66b2a70a2bc3af56d2e"}, + {file = "docling_parse-2.1.2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:5b00b81fa8eb0b34621f1ef9d07623d7dbcc354a33295a5b0c4209c39b1ff8eb"}, + {file = "docling_parse-2.1.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:1b99b122f941d0f19e92a215e589b94f49db899c5eec0147e83824652b18ce74"}, + {file = "docling_parse-2.1.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:744fe368a8fa49778e881c1052427c38a7d0e367273fcdef493e047513783108"}, + {file = "docling_parse-2.1.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:b8a3e558a96f7d593269be75ba4147ebe221f5edad3d41244cef3533e8a51b74"}, + {file = "docling_parse-2.1.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:afcf53bce8c91886c1360e625e51d15ebfb36d37cd53b6e019e86ce1118c1d0c"}, + {file = "docling_parse-2.1.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89d25fc4fb8f16a8ed5bc8c4f00a77739d2536732c0ddae16340b1859adf68fd"}, + {file = "docling_parse-2.1.2-cp312-cp312-win_amd64.whl", hash = "sha256:28a7f49a865a0cd71033a7899aac00c7d2e3b6c3a76488f8676ba0fc353d9f3a"}, + {file = "docling_parse-2.1.2-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:ad1560532cdf15dcb4a6005c8b7fe19def0e910e6125863f14978d6d07a1ba47"}, + {file = "docling_parse-2.1.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:19003b1bb64cd5a40999a3c5ffcb9a9d9608a073949b76acc58d58fb5054ea03"}, + {file = "docling_parse-2.1.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:041bf1c72a23d62e2dd30dcc3508222f6674e85b0f1d19a3196fd6d7b5f56015"}, + {file = "docling_parse-2.1.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:12403c26e833d8fdf0f406d2895f5108fd07b64a4d929c9105ca60f09b882c34"}, + {file = "docling_parse-2.1.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1082e227af3e31085eff3e96103b09becdf95324304e17ce0b1b61c43b93fbb7"}, + {file = "docling_parse-2.1.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77b36e36d1e07a06a1616ee281079d6b972c3059f2fa02dafcfc225a41e5bd1a"}, + {file = "docling_parse-2.1.2-cp313-cp313-win_amd64.whl", hash = "sha256:4300df86657935b0109c44702857ebf3d0713f1bbe376982f369504a762e2fef"}, + {file = "docling_parse-2.1.2-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:912fe44507f209d997e1183f38a71d4e14c31d53a164fb862631822624dad892"}, + {file = "docling_parse-2.1.2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:10ff1928b12099f446fcd0b043182173e6b02ce74008ea6ce921d56cdee8964e"}, + {file = "docling_parse-2.1.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:391ad31a4086fabbc290851432f4cf0bdc366e07a454adf49e42029898d6b477"}, + {file = "docling_parse-2.1.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:ebf478e99c0c16d7dad30c0fdb1f5e236ae94d48da8dec48dbe5f0841eead4ed"}, + {file = "docling_parse-2.1.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b1c904017330d096981b7db6b225b66aff1cebdc422843103a782121d6e8be8"}, + {file = "docling_parse-2.1.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8bc8ec6ad1bec6168991b895d749b222bef14b568d1d9f6c06efaeb1645dfe12"}, + {file = "docling_parse-2.1.2-cp39-cp39-win_amd64.whl", hash = "sha256:e6eb130aa367247e1f32225bb1608cee901d711b475527404bbc4330c9199b99"}, + {file = "docling_parse-2.1.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:ef88d565c761b48f8a175fd474e068c0da9d4401e22d3e38de73e2f00f3df2d1"}, + {file = "docling_parse-2.1.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:bdc8ccbdc4ab91b829b8c421ad89da276442a2c891eda1f6507f248d0bd8dff9"}, + {file = "docling_parse-2.1.2.tar.gz", hash = "sha256:3c249f50e6351eb6126331a179fe86b64dc2073e9f881d52f8c8fb391633b89e"}, ] [package.dependencies] @@ -1017,27 +1018,6 @@ Shapely = "*" torch = "*" torchvision = ">=0.5" -[[package]] -name = "environs" -version = "9.5.0" -description = "simplified environment variable parsing" -optional = false -python-versions = ">=3.6" -files = [ - {file = "environs-9.5.0-py2.py3-none-any.whl", hash = "sha256:1e549569a3de49c05f856f40bce86979e7d5ffbbc4398e7f338574c220189124"}, - {file = "environs-9.5.0.tar.gz", hash = "sha256:a76307b36fbe856bdca7ee9161e6c466fd7fcffc297109a118c59b54e27e30c9"}, -] - -[package.dependencies] -marshmallow = ">=3.0.0" -python-dotenv = "*" - -[package.extras] -dev = ["dj-database-url", "dj-email-url", "django-cache-url", "flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)", "pytest", "tox"] -django = ["dj-database-url", "dj-email-url", "django-cache-url"] -lint = ["flake8 (==4.0.1)", "flake8-bugbear (==21.9.2)", "mypy (==0.910)", "pre-commit (>=2.4,<3.0)"] -tests = ["dj-database-url", "dj-email-url", "django-cache-url", "pytest"] - [[package]] name = "et-xmlfile" version = "2.0.0" @@ -1359,70 +1339,70 @@ test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", [[package]] name = "grpcio" -version = "1.68.0" +version = "1.67.1" description = "HTTP/2-based RPC framework" optional = false python-versions = ">=3.8" files = [ - {file = "grpcio-1.68.0-cp310-cp310-linux_armv7l.whl", hash = "sha256:619b5d0f29f4f5351440e9343224c3e19912c21aeda44e0c49d0d147a8d01544"}, - {file = "grpcio-1.68.0-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:a59f5822f9459bed098ffbceb2713abbf7c6fd13f2b9243461da5c338d0cd6c3"}, - {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:c03d89df516128febc5a7e760d675b478ba25802447624edf7aa13b1e7b11e2a"}, - {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44bcbebb24363d587472089b89e2ea0ab2e2b4df0e4856ba4c0b087c82412121"}, - {file = "grpcio-1.68.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:79f81b7fbfb136247b70465bd836fa1733043fdee539cd6031cb499e9608a110"}, - {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:88fb2925789cfe6daa20900260ef0a1d0a61283dfb2d2fffe6194396a354c618"}, - {file = "grpcio-1.68.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:99f06232b5c9138593ae6f2e355054318717d32a9c09cdc5a2885540835067a1"}, - {file = "grpcio-1.68.0-cp310-cp310-win32.whl", hash = "sha256:a6213d2f7a22c3c30a479fb5e249b6b7e648e17f364598ff64d08a5136fe488b"}, - {file = "grpcio-1.68.0-cp310-cp310-win_amd64.whl", hash = "sha256:15327ab81131ef9b94cb9f45b5bd98803a179c7c61205c8c0ac9aff9d6c4e82a"}, - {file = "grpcio-1.68.0-cp311-cp311-linux_armv7l.whl", hash = "sha256:3b2b559beb2d433129441783e5f42e3be40a9e1a89ec906efabf26591c5cd415"}, - {file = "grpcio-1.68.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e46541de8425a4d6829ac6c5d9b16c03c292105fe9ebf78cb1c31e8d242f9155"}, - {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c1245651f3c9ea92a2db4f95d37b7597db6b246d5892bca6ee8c0e90d76fb73c"}, - {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4f1931c7aa85be0fa6cea6af388e576f3bf6baee9e5d481c586980c774debcb4"}, - {file = "grpcio-1.68.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b0ff09c81e3aded7a183bc6473639b46b6caa9c1901d6f5e2cba24b95e59e30"}, - {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8c73f9fbbaee1a132487e31585aa83987ddf626426d703ebcb9a528cf231c9b1"}, - {file = "grpcio-1.68.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6b2f98165ea2790ea159393a2246b56f580d24d7da0d0342c18a085299c40a75"}, - {file = "grpcio-1.68.0-cp311-cp311-win32.whl", hash = "sha256:e1e7ed311afb351ff0d0e583a66fcb39675be112d61e7cfd6c8269884a98afbc"}, - {file = "grpcio-1.68.0-cp311-cp311-win_amd64.whl", hash = "sha256:e0d2f68eaa0a755edd9a47d40e50dba6df2bceda66960dee1218da81a2834d27"}, - {file = "grpcio-1.68.0-cp312-cp312-linux_armv7l.whl", hash = "sha256:8af6137cc4ae8e421690d276e7627cfc726d4293f6607acf9ea7260bd8fc3d7d"}, - {file = "grpcio-1.68.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:4028b8e9a3bff6f377698587d642e24bd221810c06579a18420a17688e421af7"}, - {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f60fa2adf281fd73ae3a50677572521edca34ba373a45b457b5ebe87c2d01e1d"}, - {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e18589e747c1e70b60fab6767ff99b2d0c359ea1db8a2cb524477f93cdbedf5b"}, - {file = "grpcio-1.68.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0d30f3fee9372796f54d3100b31ee70972eaadcc87314be369360248a3dcffe"}, - {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:7e0a3e72c0e9a1acab77bef14a73a416630b7fd2cbd893c0a873edc47c42c8cd"}, - {file = "grpcio-1.68.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a831dcc343440969aaa812004685ed322cdb526cd197112d0db303b0da1e8659"}, - {file = "grpcio-1.68.0-cp312-cp312-win32.whl", hash = "sha256:5a180328e92b9a0050958ced34dddcb86fec5a8b332f5a229e353dafc16cd332"}, - {file = "grpcio-1.68.0-cp312-cp312-win_amd64.whl", hash = "sha256:2bddd04a790b69f7a7385f6a112f46ea0b34c4746f361ebafe9ca0be567c78e9"}, - {file = "grpcio-1.68.0-cp313-cp313-linux_armv7l.whl", hash = "sha256:fc05759ffbd7875e0ff2bd877be1438dfe97c9312bbc558c8284a9afa1d0f40e"}, - {file = "grpcio-1.68.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:15fa1fe25d365a13bc6d52fcac0e3ee1f9baebdde2c9b3b2425f8a4979fccea1"}, - {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:32a9cb4686eb2e89d97022ecb9e1606d132f85c444354c17a7dbde4a455e4a3b"}, - {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dba037ff8d284c8e7ea9a510c8ae0f5b016004f13c3648f72411c464b67ff2fb"}, - {file = "grpcio-1.68.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0efbbd849867e0e569af09e165363ade75cf84f5229b2698d53cf22c7a4f9e21"}, - {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:4e300e6978df0b65cc2d100c54e097c10dfc7018b9bd890bbbf08022d47f766d"}, - {file = "grpcio-1.68.0-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:6f9c7ad1a23e1047f827385f4713b5b8c6c7d325705be1dd3e31fb00dcb2f665"}, - {file = "grpcio-1.68.0-cp313-cp313-win32.whl", hash = "sha256:3ac7f10850fd0487fcce169c3c55509101c3bde2a3b454869639df2176b60a03"}, - {file = "grpcio-1.68.0-cp313-cp313-win_amd64.whl", hash = "sha256:afbf45a62ba85a720491bfe9b2642f8761ff348006f5ef67e4622621f116b04a"}, - {file = "grpcio-1.68.0-cp38-cp38-linux_armv7l.whl", hash = "sha256:f8f695d9576ce836eab27ba7401c60acaf9ef6cf2f70dfe5462055ba3df02cc3"}, - {file = "grpcio-1.68.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:9fe1b141cda52f2ca73e17d2d3c6a9f3f3a0c255c216b50ce616e9dca7e3441d"}, - {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:4df81d78fd1646bf94ced4fb4cd0a7fe2e91608089c522ef17bc7db26e64effd"}, - {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:46a2d74d4dd8993151c6cd585594c082abe74112c8e4175ddda4106f2ceb022f"}, - {file = "grpcio-1.68.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a17278d977746472698460c63abf333e1d806bd41f2224f90dbe9460101c9796"}, - {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:15377bce516b1c861c35e18eaa1c280692bf563264836cece693c0f169b48829"}, - {file = "grpcio-1.68.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:cc5f0a4f5904b8c25729a0498886b797feb817d1fd3812554ffa39551112c161"}, - {file = "grpcio-1.68.0-cp38-cp38-win32.whl", hash = "sha256:def1a60a111d24376e4b753db39705adbe9483ef4ca4761f825639d884d5da78"}, - {file = "grpcio-1.68.0-cp38-cp38-win_amd64.whl", hash = "sha256:55d3b52fd41ec5772a953612db4e70ae741a6d6ed640c4c89a64f017a1ac02b5"}, - {file = "grpcio-1.68.0-cp39-cp39-linux_armv7l.whl", hash = "sha256:0d230852ba97654453d290e98d6aa61cb48fa5fafb474fb4c4298d8721809354"}, - {file = "grpcio-1.68.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:50992f214264e207e07222703c17d9cfdcc2c46ed5a1ea86843d440148ebbe10"}, - {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:14331e5c27ed3545360464a139ed279aa09db088f6e9502e95ad4bfa852bb116"}, - {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f84890b205692ea813653ece4ac9afa2139eae136e419231b0eec7c39fdbe4c2"}, - {file = "grpcio-1.68.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0cf343c6f4f6aa44863e13ec9ddfe299e0be68f87d68e777328bff785897b05"}, - {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:fd2c2d47969daa0e27eadaf15c13b5e92605c5e5953d23c06d0b5239a2f176d3"}, - {file = "grpcio-1.68.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:18668e36e7f4045820f069997834e94e8275910b1f03e078a6020bd464cb2363"}, - {file = "grpcio-1.68.0-cp39-cp39-win32.whl", hash = "sha256:2af76ab7c427aaa26aa9187c3e3c42f38d3771f91a20f99657d992afada2294a"}, - {file = "grpcio-1.68.0-cp39-cp39-win_amd64.whl", hash = "sha256:e694b5928b7b33ca2d3b4d5f9bf8b5888906f181daff6b406f4938f3a997a490"}, - {file = "grpcio-1.68.0.tar.gz", hash = "sha256:7e7483d39b4a4fddb9906671e9ea21aaad4f031cdfc349fec76bdfa1e404543a"}, + {file = "grpcio-1.67.1-cp310-cp310-linux_armv7l.whl", hash = "sha256:8b0341d66a57f8a3119b77ab32207072be60c9bf79760fa609c5609f2deb1f3f"}, + {file = "grpcio-1.67.1-cp310-cp310-macosx_12_0_universal2.whl", hash = "sha256:f5a27dddefe0e2357d3e617b9079b4bfdc91341a91565111a21ed6ebbc51b22d"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_aarch64.whl", hash = "sha256:43112046864317498a33bdc4797ae6a268c36345a910de9b9c17159d8346602f"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c9b929f13677b10f63124c1a410994a401cdd85214ad83ab67cc077fc7e480f0"}, + {file = "grpcio-1.67.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7d1797a8a3845437d327145959a2c0c47c05947c9eef5ff1a4c80e499dcc6fa"}, + {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:0489063974d1452436139501bf6b180f63d4977223ee87488fe36858c5725292"}, + {file = "grpcio-1.67.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:9fd042de4a82e3e7aca44008ee2fb5da01b3e5adb316348c21980f7f58adc311"}, + {file = "grpcio-1.67.1-cp310-cp310-win32.whl", hash = "sha256:638354e698fd0c6c76b04540a850bf1db27b4d2515a19fcd5cf645c48d3eb1ed"}, + {file = "grpcio-1.67.1-cp310-cp310-win_amd64.whl", hash = "sha256:608d87d1bdabf9e2868b12338cd38a79969eaf920c89d698ead08f48de9c0f9e"}, + {file = "grpcio-1.67.1-cp311-cp311-linux_armv7l.whl", hash = "sha256:7818c0454027ae3384235a65210bbf5464bd715450e30a3d40385453a85a70cb"}, + {file = "grpcio-1.67.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:ea33986b70f83844cd00814cee4451055cd8cab36f00ac64a31f5bb09b31919e"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_aarch64.whl", hash = "sha256:c7a01337407dd89005527623a4a72c5c8e2894d22bead0895306b23c6695698f"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b866f73224b0634f4312a4674c1be21b2b4afa73cb20953cbbb73a6b36c3cc"}, + {file = "grpcio-1.67.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f9fff78ba10d4250bfc07a01bd6254a6d87dc67f9627adece85c0b2ed754fa96"}, + {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:8a23cbcc5bb11ea7dc6163078be36c065db68d915c24f5faa4f872c573bb400f"}, + {file = "grpcio-1.67.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:1a65b503d008f066e994f34f456e0647e5ceb34cfcec5ad180b1b44020ad4970"}, + {file = "grpcio-1.67.1-cp311-cp311-win32.whl", hash = "sha256:e29ca27bec8e163dca0c98084040edec3bc49afd10f18b412f483cc68c712744"}, + {file = "grpcio-1.67.1-cp311-cp311-win_amd64.whl", hash = "sha256:786a5b18544622bfb1e25cc08402bd44ea83edfb04b93798d85dca4d1a0b5be5"}, + {file = "grpcio-1.67.1-cp312-cp312-linux_armv7l.whl", hash = "sha256:267d1745894200e4c604958da5f856da6293f063327cb049a51fe67348e4f953"}, + {file = "grpcio-1.67.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:85f69fdc1d28ce7cff8de3f9c67db2b0ca9ba4449644488c1e0303c146135ddb"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_aarch64.whl", hash = "sha256:f26b0b547eb8d00e195274cdfc63ce64c8fc2d3e2d00b12bf468ece41a0423a0"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4422581cdc628f77302270ff839a44f4c24fdc57887dc2a45b7e53d8fc2376af"}, + {file = "grpcio-1.67.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1d7616d2ded471231c701489190379e0c311ee0a6c756f3c03e6a62b95a7146e"}, + {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8a00efecde9d6fcc3ab00c13f816313c040a28450e5e25739c24f432fc6d3c75"}, + {file = "grpcio-1.67.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:699e964923b70f3101393710793289e42845791ea07565654ada0969522d0a38"}, + {file = "grpcio-1.67.1-cp312-cp312-win32.whl", hash = "sha256:4e7b904484a634a0fff132958dabdb10d63e0927398273917da3ee103e8d1f78"}, + {file = "grpcio-1.67.1-cp312-cp312-win_amd64.whl", hash = "sha256:5721e66a594a6c4204458004852719b38f3d5522082be9061d6510b455c90afc"}, + {file = "grpcio-1.67.1-cp313-cp313-linux_armv7l.whl", hash = "sha256:aa0162e56fd10a5547fac8774c4899fc3e18c1aa4a4759d0ce2cd00d3696ea6b"}, + {file = "grpcio-1.67.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:beee96c8c0b1a75d556fe57b92b58b4347c77a65781ee2ac749d550f2a365dc1"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_aarch64.whl", hash = "sha256:a93deda571a1bf94ec1f6fcda2872dad3ae538700d94dc283c672a3b508ba3af"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0e6f255980afef598a9e64a24efce87b625e3e3c80a45162d111a461a9f92955"}, + {file = "grpcio-1.67.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e838cad2176ebd5d4a8bb03955138d6589ce9e2ce5d51c3ada34396dbd2dba8"}, + {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_i686.whl", hash = "sha256:a6703916c43b1d468d0756c8077b12017a9fcb6a1ef13faf49e67d20d7ebda62"}, + {file = "grpcio-1.67.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:917e8d8994eed1d86b907ba2a61b9f0aef27a2155bca6cbb322430fc7135b7bb"}, + {file = "grpcio-1.67.1-cp313-cp313-win32.whl", hash = "sha256:e279330bef1744040db8fc432becc8a727b84f456ab62b744d3fdb83f327e121"}, + {file = "grpcio-1.67.1-cp313-cp313-win_amd64.whl", hash = "sha256:fa0c739ad8b1996bd24823950e3cb5152ae91fca1c09cc791190bf1627ffefba"}, + {file = "grpcio-1.67.1-cp38-cp38-linux_armv7l.whl", hash = "sha256:178f5db771c4f9a9facb2ab37a434c46cb9be1a75e820f187ee3d1e7805c4f65"}, + {file = "grpcio-1.67.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:0f3e49c738396e93b7ba9016e153eb09e0778e776df6090c1b8c91877cc1c426"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_aarch64.whl", hash = "sha256:24e8a26dbfc5274d7474c27759b54486b8de23c709d76695237515bc8b5baeab"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3b6c16489326d79ead41689c4b84bc40d522c9a7617219f4ad94bc7f448c5085"}, + {file = "grpcio-1.67.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:60e6a4dcf5af7bbc36fd9f81c9f372e8ae580870a9e4b6eafe948cd334b81cf3"}, + {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:95b5f2b857856ed78d72da93cd7d09b6db8ef30102e5e7fe0961fe4d9f7d48e8"}, + {file = "grpcio-1.67.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b49359977c6ec9f5d0573ea4e0071ad278ef905aa74e420acc73fd28ce39e9ce"}, + {file = "grpcio-1.67.1-cp38-cp38-win32.whl", hash = "sha256:f5b76ff64aaac53fede0cc93abf57894ab2a7362986ba22243d06218b93efe46"}, + {file = "grpcio-1.67.1-cp38-cp38-win_amd64.whl", hash = "sha256:804c6457c3cd3ec04fe6006c739579b8d35c86ae3298ffca8de57b493524b771"}, + {file = "grpcio-1.67.1-cp39-cp39-linux_armv7l.whl", hash = "sha256:a25bdea92b13ff4d7790962190bf6bf5c4639876e01c0f3dda70fc2769616335"}, + {file = "grpcio-1.67.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cdc491ae35a13535fd9196acb5afe1af37c8237df2e54427be3eecda3653127e"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_aarch64.whl", hash = "sha256:85f862069b86a305497e74d0dc43c02de3d1d184fc2c180993aa8aa86fbd19b8"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec74ef02010186185de82cc594058a3ccd8d86821842bbac9873fd4a2cf8be8d"}, + {file = "grpcio-1.67.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:01f616a964e540638af5130469451cf580ba8c7329f45ca998ab66e0c7dcdb04"}, + {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:299b3d8c4f790c6bcca485f9963b4846dd92cf6f1b65d3697145d005c80f9fe8"}, + {file = "grpcio-1.67.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:60336bff760fbb47d7e86165408126f1dded184448e9a4c892189eb7c9d3f90f"}, + {file = "grpcio-1.67.1-cp39-cp39-win32.whl", hash = "sha256:5ed601c4c6008429e3d247ddb367fe8c7259c355757448d7c1ef7bd4a6739e8e"}, + {file = "grpcio-1.67.1-cp39-cp39-win_amd64.whl", hash = "sha256:5db70d32d6703b89912af16d6d45d78406374a8b8ef0d28140351dd0ec610e98"}, + {file = "grpcio-1.67.1.tar.gz", hash = "sha256:3dc2ed4cabea4dc14d5e708c2b426205956077cc5de419b4d4079315017e9732"}, ] [package.extras] -protobuf = ["grpcio-tools (>=1.68.0)"] +protobuf = ["grpcio-tools (>=1.67.1)"] [[package]] name = "h11" @@ -1517,13 +1497,13 @@ typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "t [[package]] name = "identify" -version = "2.6.2" +version = "2.6.3" description = "File identification library for Python" optional = false python-versions = ">=3.9" files = [ - {file = "identify-2.6.2-py2.py3-none-any.whl", hash = "sha256:c097384259f49e372f4ea00a19719d95ae27dd5ff0fd77ad630aa891306b82f3"}, - {file = "identify-2.6.2.tar.gz", hash = "sha256:fab5c716c24d7a789775228823797296a2994b075fb6080ac83a102772a98cbd"}, + {file = "identify-2.6.3-py2.py3-none-any.whl", hash = "sha256:9edba65473324c2ea9684b1f944fe3191db3345e50b6d04571d10ed164f8d7bd"}, + {file = "identify-2.6.3.tar.gz", hash = "sha256:62f5dae9b5fef52c84cc188514e9ea4f3f636b1d8799ab5ebc475471f9e47a02"}, ] [package.extras] @@ -2126,18 +2106,18 @@ langchain-core = ">=0.2.38,<0.3.0" [[package]] name = "langsmith" -version = "0.1.143" +version = "0.1.146" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.143-py3-none-any.whl", hash = "sha256:ba0d827269e9b03a90fababe41fa3e4e3f833300b95add10184f7e67167dde6f"}, - {file = "langsmith-0.1.143.tar.gz", hash = "sha256:4c5159e5cd84b3f8499433009e72d2076dd2daf6c044ac8a3611b30d0d0161c5"}, + {file = "langsmith-0.1.146-py3-none-any.whl", hash = "sha256:9d062222f1a32c9b047dab0149b24958f988989cd8d4a5f9139ff959a51e59d8"}, + {file = "langsmith-0.1.146.tar.gz", hash = "sha256:ead8b0b9d5b6cd3ac42937ec48bdf09d4afe7ca1bba22dc05eb65591a18106f8"}, ] [package.dependencies] httpx = ">=0.23.0,<1" -orjson = ">=3.9.14,<4.0.0" +orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} pydantic = [ {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, @@ -2212,111 +2192,157 @@ files = [ [[package]] name = "lxml" -version = "4.9.4" +version = "5.3.0" description = "Powerful and Pythonic XML processing library combining libxml2/libxslt with the ElementTree API." optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, != 3.4.*" +python-versions = ">=3.6" files = [ - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e214025e23db238805a600f1f37bf9f9a15413c7bf5f9d6ae194f84980c78722"}, - {file = "lxml-4.9.4-cp27-cp27m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:ec53a09aee61d45e7dbe7e91252ff0491b6b5fee3d85b2d45b173d8ab453efc1"}, - {file = "lxml-4.9.4-cp27-cp27m-win32.whl", hash = "sha256:7d1d6c9e74c70ddf524e3c09d9dc0522aba9370708c2cb58680ea40174800013"}, - {file = "lxml-4.9.4-cp27-cp27m-win_amd64.whl", hash = "sha256:cb53669442895763e61df5c995f0e8361b61662f26c1b04ee82899c2789c8f69"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:647bfe88b1997d7ae8d45dabc7c868d8cb0c8412a6e730a7651050b8c7289cf2"}, - {file = "lxml-4.9.4-cp27-cp27mu-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:4d973729ce04784906a19108054e1fd476bc85279a403ea1a72fdb051c76fa48"}, - {file = "lxml-4.9.4-cp310-cp310-macosx_11_0_x86_64.whl", hash = "sha256:056a17eaaf3da87a05523472ae84246f87ac2f29a53306466c22e60282e54ff8"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aaa5c173a26960fe67daa69aa93d6d6a1cd714a6eb13802d4e4bd1d24a530644"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:647459b23594f370c1c01768edaa0ba0959afc39caeeb793b43158bb9bb6a663"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:bdd9abccd0927673cffe601d2c6cdad1c9321bf3437a2f507d6b037ef91ea307"}, - {file = "lxml-4.9.4-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:00e91573183ad273e242db5585b52670eddf92bacad095ce25c1e682da14ed91"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:a602ed9bd2c7d85bd58592c28e101bd9ff9c718fbde06545a70945ffd5d11868"}, - {file = "lxml-4.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:de362ac8bc962408ad8fae28f3967ce1a262b5d63ab8cefb42662566737f1dc7"}, - {file = "lxml-4.9.4-cp310-cp310-win32.whl", hash = "sha256:33714fcf5af4ff7e70a49731a7cc8fd9ce910b9ac194f66eaa18c3cc0a4c02be"}, - {file = "lxml-4.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:d3caa09e613ece43ac292fbed513a4bce170681a447d25ffcbc1b647d45a39c5"}, - {file = "lxml-4.9.4-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:359a8b09d712df27849e0bcb62c6a3404e780b274b0b7e4c39a88826d1926c28"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:43498ea734ccdfb92e1886dfedaebeb81178a241d39a79d5351ba2b671bff2b2"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:4855161013dfb2b762e02b3f4d4a21cc7c6aec13c69e3bffbf5022b3e708dd97"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:c71b5b860c5215fdbaa56f715bc218e45a98477f816b46cfde4a84d25b13274e"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:9a2b5915c333e4364367140443b59f09feae42184459b913f0f41b9fed55794a"}, - {file = "lxml-4.9.4-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:d82411dbf4d3127b6cde7da0f9373e37ad3a43e89ef374965465928f01c2b979"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:273473d34462ae6e97c0f4e517bd1bf9588aa67a1d47d93f760a1282640e24ac"}, - {file = "lxml-4.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:389d2b2e543b27962990ab529ac6720c3dded588cc6d0f6557eec153305a3622"}, - {file = "lxml-4.9.4-cp311-cp311-win32.whl", hash = "sha256:8aecb5a7f6f7f8fe9cac0bcadd39efaca8bbf8d1bf242e9f175cbe4c925116c3"}, - {file = "lxml-4.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:c7721a3ef41591341388bb2265395ce522aba52f969d33dacd822da8f018aff8"}, - {file = "lxml-4.9.4-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:dbcb2dc07308453db428a95a4d03259bd8caea97d7f0776842299f2d00c72fc8"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:01bf1df1db327e748dcb152d17389cf6d0a8c5d533ef9bab781e9d5037619229"}, - {file = "lxml-4.9.4-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e8f9f93a23634cfafbad6e46ad7d09e0f4a25a2400e4a64b1b7b7c0fbaa06d9d"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:3f3f00a9061605725df1816f5713d10cd94636347ed651abdbc75828df302b20"}, - {file = "lxml-4.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:953dd5481bd6252bd480d6ec431f61d7d87fdcbbb71b0d2bdcfc6ae00bb6fb10"}, - {file = "lxml-4.9.4-cp312-cp312-win32.whl", hash = "sha256:266f655d1baff9c47b52f529b5f6bec33f66042f65f7c56adde3fcf2ed62ae8b"}, - {file = "lxml-4.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:f1faee2a831fe249e1bae9cbc68d3cd8a30f7e37851deee4d7962b17c410dd56"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:23d891e5bdc12e2e506e7d225d6aa929e0a0368c9916c1fddefab88166e98b20"}, - {file = "lxml-4.9.4-cp35-cp35m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:e96a1788f24d03e8d61679f9881a883ecdf9c445a38f9ae3f3f193ab6c591c66"}, - {file = "lxml-4.9.4-cp36-cp36m-macosx_11_0_x86_64.whl", hash = "sha256:5557461f83bb7cc718bc9ee1f7156d50e31747e5b38d79cf40f79ab1447afd2d"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:fdb325b7fba1e2c40b9b1db407f85642e32404131c08480dd652110fc908561b"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3d74d4a3c4b8f7a1f676cedf8e84bcc57705a6d7925e6daef7a1e54ae543a197"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:ac7674d1638df129d9cb4503d20ffc3922bd463c865ef3cb412f2c926108e9a4"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:ddd92e18b783aeb86ad2132d84a4b795fc5ec612e3545c1b687e7747e66e2b53"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2bd9ac6e44f2db368ef8986f3989a4cad3de4cd55dbdda536e253000c801bcc7"}, - {file = "lxml-4.9.4-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:bc354b1393dce46026ab13075f77b30e40b61b1a53e852e99d3cc5dd1af4bc85"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:f836f39678cb47c9541f04d8ed4545719dc31ad850bf1832d6b4171e30d65d23"}, - {file = "lxml-4.9.4-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:9c131447768ed7bc05a02553d939e7f0e807e533441901dd504e217b76307745"}, - {file = "lxml-4.9.4-cp36-cp36m-win32.whl", hash = "sha256:bafa65e3acae612a7799ada439bd202403414ebe23f52e5b17f6ffc2eb98c2be"}, - {file = "lxml-4.9.4-cp36-cp36m-win_amd64.whl", hash = "sha256:6197c3f3c0b960ad033b9b7d611db11285bb461fc6b802c1dd50d04ad715c225"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:7b378847a09d6bd46047f5f3599cdc64fcb4cc5a5a2dd0a2af610361fbe77b16"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:1343df4e2e6e51182aad12162b23b0a4b3fd77f17527a78c53f0f23573663545"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:6dbdacf5752fbd78ccdb434698230c4f0f95df7dd956d5f205b5ed6911a1367c"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:506becdf2ecaebaf7f7995f776394fcc8bd8a78022772de66677c84fb02dd33d"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ca8e44b5ba3edb682ea4e6185b49661fc22b230cf811b9c13963c9f982d1d964"}, - {file = "lxml-4.9.4-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:9d9d5726474cbbef279fd709008f91a49c4f758bec9c062dfbba88eab00e3ff9"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:bbdd69e20fe2943b51e2841fc1e6a3c1de460d630f65bde12452d8c97209464d"}, - {file = "lxml-4.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8671622256a0859f5089cbe0ce4693c2af407bc053dcc99aadff7f5310b4aa02"}, - {file = "lxml-4.9.4-cp37-cp37m-win32.whl", hash = "sha256:dd4fda67f5faaef4f9ee5383435048ee3e11ad996901225ad7615bc92245bc8e"}, - {file = "lxml-4.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:6bee9c2e501d835f91460b2c904bc359f8433e96799f5c2ff20feebd9bb1e590"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:1f10f250430a4caf84115b1e0f23f3615566ca2369d1962f82bef40dd99cd81a"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:3b505f2bbff50d261176e67be24e8909e54b5d9d08b12d4946344066d66b3e43"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:1449f9451cd53e0fd0a7ec2ff5ede4686add13ac7a7bfa6988ff6d75cff3ebe2"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:4ece9cca4cd1c8ba889bfa67eae7f21d0d1a2e715b4d5045395113361e8c533d"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:59bb5979f9941c61e907ee571732219fa4774d5a18f3fa5ff2df963f5dfaa6bc"}, - {file = "lxml-4.9.4-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:b1980dbcaad634fe78e710c8587383e6e3f61dbe146bcbfd13a9c8ab2d7b1192"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:9ae6c3363261021144121427b1552b29e7b59de9d6a75bf51e03bc072efb3c37"}, - {file = "lxml-4.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:bcee502c649fa6351b44bb014b98c09cb00982a475a1912a9881ca28ab4f9cd9"}, - {file = "lxml-4.9.4-cp38-cp38-win32.whl", hash = "sha256:a8edae5253efa75c2fc79a90068fe540b197d1c7ab5803b800fccfe240eed33c"}, - {file = "lxml-4.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:701847a7aaefef121c5c0d855b2affa5f9bd45196ef00266724a80e439220e46"}, - {file = "lxml-4.9.4-cp39-cp39-macosx_11_0_x86_64.whl", hash = "sha256:f610d980e3fccf4394ab3806de6065682982f3d27c12d4ce3ee46a8183d64a6a"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:aa9b5abd07f71b081a33115d9758ef6077924082055005808f68feccb27616bd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.manylinux_2_24_aarch64.whl", hash = "sha256:365005e8b0718ea6d64b374423e870648ab47c3a905356ab6e5a5ff03962b9a9"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:16b9ec51cc2feab009e800f2c6327338d6ee4e752c76e95a35c4465e80390ccd"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:a905affe76f1802edcac554e3ccf68188bea16546071d7583fb1b693f9cf756b"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:fd814847901df6e8de13ce69b84c31fc9b3fb591224d6762d0b256d510cbf382"}, - {file = "lxml-4.9.4-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:91bbf398ac8bb7d65a5a52127407c05f75a18d7015a270fdd94bbcb04e65d573"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:f99768232f036b4776ce419d3244a04fe83784bce871b16d2c2e984c7fcea847"}, - {file = "lxml-4.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bb5bd6212eb0edfd1e8f254585290ea1dadc3687dd8fd5e2fd9a87c31915cdab"}, - {file = "lxml-4.9.4-cp39-cp39-win32.whl", hash = "sha256:88f7c383071981c74ec1998ba9b437659e4fd02a3c4a4d3efc16774eb108d0ec"}, - {file = "lxml-4.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:936e8880cc00f839aa4173f94466a8406a96ddce814651075f95837316369899"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-macosx_11_0_x86_64.whl", hash = "sha256:f6c35b2f87c004270fa2e703b872fcc984d714d430b305145c39d53074e1ffe0"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:606d445feeb0856c2b424405236a01c71af7c97e5fe42fbc778634faef2b47e4"}, - {file = "lxml-4.9.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:a1bdcbebd4e13446a14de4dd1825f1e778e099f17f79718b4aeaf2403624b0f7"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:0a08c89b23117049ba171bf51d2f9c5f3abf507d65d016d6e0fa2f37e18c0fc5"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:232fd30903d3123be4c435fb5159938c6225ee8607b635a4d3fca847003134ba"}, - {file = "lxml-4.9.4-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:231142459d32779b209aa4b4d460b175cadd604fed856f25c1571a9d78114771"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-macosx_11_0_x86_64.whl", hash = "sha256:520486f27f1d4ce9654154b4494cf9307b495527f3a2908ad4cb48e4f7ed7ef7"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:562778586949be7e0d7435fcb24aca4810913771f845d99145a6cee64d5b67ca"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:a9e7c6d89c77bb2770c9491d988f26a4b161d05c8ca58f63fb1f1b6b9a74be45"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:786d6b57026e7e04d184313c1359ac3d68002c33e4b1042ca58c362f1d09ff58"}, - {file = "lxml-4.9.4-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:95ae6c5a196e2f239150aa4a479967351df7f44800c93e5a975ec726fef005e2"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-macosx_11_0_x86_64.whl", hash = "sha256:9b556596c49fa1232b0fff4b0e69b9d4083a502e60e404b44341e2f8fb7187f5"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_24_i686.whl", hash = "sha256:cc02c06e9e320869d7d1bd323df6dd4281e78ac2e7f8526835d3d48c69060683"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.manylinux_2_24_x86_64.whl", hash = "sha256:857d6565f9aa3464764c2cb6a2e3c2e75e1970e877c188f4aeae45954a314e0c"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:c42ae7e010d7d6bc51875d768110c10e8a59494855c3d4c348b068f5fb81fdcd"}, - {file = "lxml-4.9.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:f10250bb190fb0742e3e1958dd5c100524c2cc5096c67c8da51233f7448dc137"}, - {file = "lxml-4.9.4.tar.gz", hash = "sha256:b1541e50b78e15fa06a2670157a1962ef06591d4c998b998047fff5e3236880e"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:dd36439be765e2dde7660212b5275641edbc813e7b24668831a5c8ac91180656"}, + {file = "lxml-5.3.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ae5fe5c4b525aa82b8076c1a59d642c17b6e8739ecf852522c6321852178119d"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:501d0d7e26b4d261fca8132854d845e4988097611ba2531408ec91cf3fd9d20a"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb66442c2546446944437df74379e9cf9e9db353e61301d1a0e26482f43f0dd8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9e41506fec7a7f9405b14aa2d5c8abbb4dbbd09d88f9496958b6d00cb4d45330"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f7d4a670107d75dfe5ad080bed6c341d18c4442f9378c9f58e5851e86eb79965"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41ce1f1e2c7755abfc7e759dc34d7d05fd221723ff822947132dc934d122fe22"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:44264ecae91b30e5633013fb66f6ddd05c006d3e0e884f75ce0b4755b3e3847b"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_ppc64le.whl", hash = "sha256:3c174dc350d3ec52deb77f2faf05c439331d6ed5e702fc247ccb4e6b62d884b7"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_s390x.whl", hash = "sha256:2dfab5fa6a28a0b60a20638dc48e6343c02ea9933e3279ccb132f555a62323d8"}, + {file = "lxml-5.3.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:b1c8c20847b9f34e98080da785bb2336ea982e7f913eed5809e5a3c872900f32"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:2c86bf781b12ba417f64f3422cfc302523ac9cd1d8ae8c0f92a1c66e56ef2e86"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:c162b216070f280fa7da844531169be0baf9ccb17263cf5a8bf876fcd3117fa5"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:36aef61a1678cb778097b4a6eeae96a69875d51d1e8f4d4b491ab3cfb54b5a03"}, + {file = "lxml-5.3.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:f65e5120863c2b266dbcc927b306c5b78e502c71edf3295dfcb9501ec96e5fc7"}, + {file = "lxml-5.3.0-cp310-cp310-win32.whl", hash = "sha256:ef0c1fe22171dd7c7c27147f2e9c3e86f8bdf473fed75f16b0c2e84a5030ce80"}, + {file = "lxml-5.3.0-cp310-cp310-win_amd64.whl", hash = "sha256:052d99051e77a4f3e8482c65014cf6372e61b0a6f4fe9edb98503bb5364cfee3"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:74bcb423462233bc5d6066e4e98b0264e7c1bed7541fff2f4e34fe6b21563c8b"}, + {file = "lxml-5.3.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:a3d819eb6f9b8677f57f9664265d0a10dd6551d227afb4af2b9cd7bdc2ccbf18"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5b8f5db71b28b8c404956ddf79575ea77aa8b1538e8b2ef9ec877945b3f46442"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2c3406b63232fc7e9b8783ab0b765d7c59e7c59ff96759d8ef9632fca27c7ee4"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2ecdd78ab768f844c7a1d4a03595038c166b609f6395e25af9b0f3f26ae1230f"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:168f2dfcfdedf611eb285efac1516c8454c8c99caf271dccda8943576b67552e"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa617107a410245b8660028a7483b68e7914304a6d4882b5ff3d2d3eb5948d8c"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:69959bd3167b993e6e710b99051265654133a98f20cec1d9b493b931942e9c16"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_ppc64le.whl", hash = "sha256:bd96517ef76c8654446fc3db9242d019a1bb5fe8b751ba414765d59f99210b79"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_s390x.whl", hash = "sha256:ab6dd83b970dc97c2d10bc71aa925b84788c7c05de30241b9e96f9b6d9ea3080"}, + {file = "lxml-5.3.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:eec1bb8cdbba2925bedc887bc0609a80e599c75b12d87ae42ac23fd199445654"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a7095eeec6f89111d03dabfe5883a1fd54da319c94e0fb104ee8f23616b572d"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6f651ebd0b21ec65dfca93aa629610a0dbc13dbc13554f19b0113da2e61a4763"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:f422a209d2455c56849442ae42f25dbaaba1c6c3f501d58761c619c7836642ec"}, + {file = "lxml-5.3.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:62f7fdb0d1ed2065451f086519865b4c90aa19aed51081979ecd05a21eb4d1be"}, + {file = "lxml-5.3.0-cp311-cp311-win32.whl", hash = "sha256:c6379f35350b655fd817cd0d6cbeef7f265f3ae5fedb1caae2eb442bbeae9ab9"}, + {file = "lxml-5.3.0-cp311-cp311-win_amd64.whl", hash = "sha256:9c52100e2c2dbb0649b90467935c4b0de5528833c76a35ea1a2691ec9f1ee7a1"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:e99f5507401436fdcc85036a2e7dc2e28d962550afe1cbfc07c40e454256a859"}, + {file = "lxml-5.3.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:384aacddf2e5813a36495233b64cb96b1949da72bef933918ba5c84e06af8f0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:874a216bf6afaf97c263b56371434e47e2c652d215788396f60477540298218f"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:65ab5685d56914b9a2a34d67dd5488b83213d680b0c5d10b47f81da5a16b0b0e"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:aac0bbd3e8dd2d9c45ceb82249e8bdd3ac99131a32b4d35c8af3cc9db1657179"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b369d3db3c22ed14c75ccd5af429086f166a19627e84a8fdade3f8f31426e52a"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c24037349665434f375645fa9d1f5304800cec574d0310f618490c871fd902b3"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:62d172f358f33a26d6b41b28c170c63886742f5b6772a42b59b4f0fa10526cb1"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_ppc64le.whl", hash = "sha256:c1f794c02903c2824fccce5b20c339a1a14b114e83b306ff11b597c5f71a1c8d"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_s390x.whl", hash = "sha256:5d6a6972b93c426ace71e0be9a6f4b2cfae9b1baed2eed2006076a746692288c"}, + {file = "lxml-5.3.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:3879cc6ce938ff4eb4900d901ed63555c778731a96365e53fadb36437a131a99"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:74068c601baff6ff021c70f0935b0c7bc528baa8ea210c202e03757c68c5a4ff"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:ecd4ad8453ac17bc7ba3868371bffb46f628161ad0eefbd0a855d2c8c32dd81a"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:7e2f58095acc211eb9d8b5771bf04df9ff37d6b87618d1cbf85f92399c98dae8"}, + {file = "lxml-5.3.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:e63601ad5cd8f860aa99d109889b5ac34de571c7ee902d6812d5d9ddcc77fa7d"}, + {file = "lxml-5.3.0-cp312-cp312-win32.whl", hash = "sha256:17e8d968d04a37c50ad9c456a286b525d78c4a1c15dd53aa46c1d8e06bf6fa30"}, + {file = "lxml-5.3.0-cp312-cp312-win_amd64.whl", hash = "sha256:c1a69e58a6bb2de65902051d57fde951febad631a20a64572677a1052690482f"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8c72e9563347c7395910de6a3100a4840a75a6f60e05af5e58566868d5eb2d6a"}, + {file = "lxml-5.3.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e92ce66cd919d18d14b3856906a61d3f6b6a8500e0794142338da644260595cd"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1d04f064bebdfef9240478f7a779e8c5dc32b8b7b0b2fc6a62e39b928d428e51"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c2fb570d7823c2bbaf8b419ba6e5662137f8166e364a8b2b91051a1fb40ab8b"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c120f43553ec759f8de1fee2f4794452b0946773299d44c36bfe18e83caf002"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:562e7494778a69086f0312ec9689f6b6ac1c6b65670ed7d0267e49f57ffa08c4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:423b121f7e6fa514ba0c7918e56955a1d4470ed35faa03e3d9f0e3baa4c7e492"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:c00f323cc00576df6165cc9d21a4c21285fa6b9989c5c39830c3903dc4303ef3"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_ppc64le.whl", hash = "sha256:1fdc9fae8dd4c763e8a31e7630afef517eab9f5d5d31a278df087f307bf601f4"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_s390x.whl", hash = "sha256:658f2aa69d31e09699705949b5fc4719cbecbd4a97f9656a232e7d6c7be1a367"}, + {file = "lxml-5.3.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:1473427aff3d66a3fa2199004c3e601e6c4500ab86696edffdbc84954c72d832"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a87de7dd873bf9a792bf1e58b1c3887b9264036629a5bf2d2e6579fe8e73edff"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:0d7b36afa46c97875303a94e8f3ad932bf78bace9e18e603f2085b652422edcd"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:cf120cce539453ae086eacc0130a324e7026113510efa83ab42ef3fcfccac7fb"}, + {file = "lxml-5.3.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:df5c7333167b9674aa8ae1d4008fa4bc17a313cc490b2cca27838bbdcc6bb15b"}, + {file = "lxml-5.3.0-cp313-cp313-win32.whl", hash = "sha256:c802e1c2ed9f0c06a65bc4ed0189d000ada8049312cfeab6ca635e39c9608957"}, + {file = "lxml-5.3.0-cp313-cp313-win_amd64.whl", hash = "sha256:406246b96d552e0503e17a1006fd27edac678b3fcc9f1be71a2f94b4ff61528d"}, + {file = "lxml-5.3.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:8f0de2d390af441fe8b2c12626d103540b5d850d585b18fcada58d972b74a74e"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1afe0a8c353746e610bd9031a630a95bcfb1a720684c3f2b36c4710a0a96528f"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:56b9861a71575f5795bde89256e7467ece3d339c9b43141dbdd54544566b3b94"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_28_x86_64.whl", hash = "sha256:9fb81d2824dff4f2e297a276297e9031f46d2682cafc484f49de182aa5e5df99"}, + {file = "lxml-5.3.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.whl", hash = "sha256:2c226a06ecb8cdef28845ae976da407917542c5e6e75dcac7cc33eb04aaeb237"}, + {file = "lxml-5.3.0-cp36-cp36m-musllinux_1_2_x86_64.whl", hash = "sha256:7d3d1ca42870cdb6d0d29939630dbe48fa511c203724820fc0fd507b2fb46577"}, + {file = "lxml-5.3.0-cp36-cp36m-win32.whl", hash = "sha256:094cb601ba9f55296774c2d57ad68730daa0b13dc260e1f941b4d13678239e70"}, + {file = "lxml-5.3.0-cp36-cp36m-win_amd64.whl", hash = "sha256:eafa2c8658f4e560b098fe9fc54539f86528651f61849b22111a9b107d18910c"}, + {file = "lxml-5.3.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:cb83f8a875b3d9b458cada4f880fa498646874ba4011dc974e071a0a84a1b033"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:25f1b69d41656b05885aa185f5fdf822cb01a586d1b32739633679699f220391"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23e0553b8055600b3bf4a00b255ec5c92e1e4aebf8c2c09334f8368e8bd174d6"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ada35dd21dc6c039259596b358caab6b13f4db4d4a7f8665764d616daf9cc1d"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_aarch64.whl", hash = "sha256:81b4e48da4c69313192d8c8d4311e5d818b8be1afe68ee20f6385d0e96fc9512"}, + {file = "lxml-5.3.0-cp37-cp37m-manylinux_2_28_x86_64.whl", hash = "sha256:2bc9fd5ca4729af796f9f59cd8ff160fe06a474da40aca03fcc79655ddee1a8b"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_aarch64.whl", hash = "sha256:07da23d7ee08577760f0a71d67a861019103e4812c87e2fab26b039054594cc5"}, + {file = "lxml-5.3.0-cp37-cp37m-musllinux_1_2_x86_64.whl", hash = "sha256:ea2e2f6f801696ad7de8aec061044d6c8c0dd4037608c7cab38a9a4d316bfb11"}, + {file = "lxml-5.3.0-cp37-cp37m-win32.whl", hash = "sha256:5c54afdcbb0182d06836cc3d1be921e540be3ebdf8b8a51ee3ef987537455f84"}, + {file = "lxml-5.3.0-cp37-cp37m-win_amd64.whl", hash = "sha256:f2901429da1e645ce548bf9171784c0f74f0718c3f6150ce166be39e4dd66c3e"}, + {file = "lxml-5.3.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:c56a1d43b2f9ee4786e4658c7903f05da35b923fb53c11025712562d5cc02753"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ee8c39582d2652dcd516d1b879451500f8db3fe3607ce45d7c5957ab2596040"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0fdf3a3059611f7585a78ee10399a15566356116a4288380921a4b598d807a22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:146173654d79eb1fc97498b4280c1d3e1e5d58c398fa530905c9ea50ea849b22"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:0a7056921edbdd7560746f4221dca89bb7a3fe457d3d74267995253f46343f15"}, + {file = "lxml-5.3.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:9e4b47ac0f5e749cfc618efdf4726269441014ae1d5583e047b452a32e221920"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:f914c03e6a31deb632e2daa881fe198461f4d06e57ac3d0e05bbcab8eae01945"}, + {file = "lxml-5.3.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:213261f168c5e1d9b7535a67e68b1f59f92398dd17a56d934550837143f79c42"}, + {file = "lxml-5.3.0-cp38-cp38-win32.whl", hash = "sha256:218c1b2e17a710e363855594230f44060e2025b05c80d1f0661258142b2add2e"}, + {file = "lxml-5.3.0-cp38-cp38-win_amd64.whl", hash = "sha256:315f9542011b2c4e1d280e4a20ddcca1761993dda3afc7a73b01235f8641e903"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1ffc23010330c2ab67fac02781df60998ca8fe759e8efde6f8b756a20599c5de"}, + {file = "lxml-5.3.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:2b3778cb38212f52fac9fe913017deea2fdf4eb1a4f8e4cfc6b009a13a6d3fcc"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4b0c7a688944891086ba192e21c5229dea54382f4836a209ff8d0a660fac06be"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:747a3d3e98e24597981ca0be0fd922aebd471fa99d0043a3842d00cdcad7ad6a"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86a6b24b19eaebc448dc56b87c4865527855145d851f9fc3891673ff97950540"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b11a5d918a6216e521c715b02749240fb07ae5a1fefd4b7bf12f833bc8b4fe70"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:68b87753c784d6acb8a25b05cb526c3406913c9d988d51f80adecc2b0775d6aa"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:109fa6fede314cc50eed29e6e56c540075e63d922455346f11e4d7a036d2b8cf"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_ppc64le.whl", hash = "sha256:02ced472497b8362c8e902ade23e3300479f4f43e45f4105c85ef43b8db85229"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_s390x.whl", hash = "sha256:6b038cc86b285e4f9fea2ba5ee76e89f21ed1ea898e287dc277a25884f3a7dfe"}, + {file = "lxml-5.3.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:7437237c6a66b7ca341e868cda48be24b8701862757426852c9b3186de1da8a2"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7f41026c1d64043a36fda21d64c5026762d53a77043e73e94b71f0521939cc71"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:482c2f67761868f0108b1743098640fbb2a28a8e15bf3f47ada9fa59d9fe08c3"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:1483fd3358963cc5c1c9b122c80606a3a79ee0875bcac0204149fa09d6ff2727"}, + {file = "lxml-5.3.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dec2d1130a9cda5b904696cec33b2cfb451304ba9081eeda7f90f724097300a"}, + {file = "lxml-5.3.0-cp39-cp39-win32.whl", hash = "sha256:a0eabd0a81625049c5df745209dc7fcef6e2aea7793e5f003ba363610aa0a3ff"}, + {file = "lxml-5.3.0-cp39-cp39-win_amd64.whl", hash = "sha256:89e043f1d9d341c52bf2af6d02e6adde62e0a46e6755d5eb60dc6e4f0b8aeca2"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-macosx_10_15_x86_64.whl", hash = "sha256:7b1cd427cb0d5f7393c31b7496419da594fe600e6fdc4b105a54f82405e6626c"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:51806cfe0279e06ed8500ce19479d757db42a30fd509940b1701be9c86a5ff9a"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ee70d08fd60c9565ba8190f41a46a54096afa0eeb8f76bd66f2c25d3b1b83005"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:8dc2c0395bea8254d8daebc76dcf8eb3a95ec2a46fa6fae5eaccee366bfe02ce"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:6ba0d3dcac281aad8a0e5b14c7ed6f9fa89c8612b47939fc94f80b16e2e9bc83"}, + {file = "lxml-5.3.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6e91cf736959057f7aac7adfc83481e03615a8e8dd5758aa1d95ea69e8931dba"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-macosx_10_9_x86_64.whl", hash = "sha256:94d6c3782907b5e40e21cadf94b13b0842ac421192f26b84c45f13f3c9d5dc27"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c300306673aa0f3ed5ed9372b21867690a17dba38c68c44b287437c362ce486b"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:78d9b952e07aed35fe2e1a7ad26e929595412db48535921c5013edc8aa4a35ce"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:01220dca0d066d1349bd6a1726856a78f7929f3878f7e2ee83c296c69495309e"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:2d9b8d9177afaef80c53c0a9e30fa252ff3036fb1c6494d427c066a4ce6a282f"}, + {file = "lxml-5.3.0-pp37-pypy37_pp73-win_amd64.whl", hash = "sha256:20094fc3f21ea0a8669dc4c61ed7fa8263bd37d97d93b90f28fc613371e7a875"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:ace2c2326a319a0bb8a8b0e5b570c764962e95818de9f259ce814ee666603f19"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:92e67a0be1639c251d21e35fe74df6bcc40cba445c2cda7c4a967656733249e2"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dd5350b55f9fecddc51385463a4f67a5da829bc741e38cf689f38ec9023f54ab"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:4c1fefd7e3d00921c44dc9ca80a775af49698bbfd92ea84498e56acffd4c5469"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:71a8dd38fbd2f2319136d4ae855a7078c69c9a38ae06e0c17c73fd70fc6caad8"}, + {file = "lxml-5.3.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:97acf1e1fd66ab53dacd2c35b319d7e548380c2e9e8c54525c6e76d21b1ae3b1"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-macosx_10_15_x86_64.whl", hash = "sha256:68934b242c51eb02907c5b81d138cb977b2129a0a75a8f8b60b01cb8586c7b21"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b710bc2b8292966b23a6a0121f7a6c51d45d2347edcc75f016ac123b8054d3f2"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18feb4b93302091b1541221196a2155aa296c363fd233814fa11e181adebc52f"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_aarch64.whl", hash = "sha256:3eb44520c4724c2e1a57c0af33a379eee41792595023f367ba3952a2d96c2aab"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-manylinux_2_28_x86_64.whl", hash = "sha256:609251a0ca4770e5a8768ff902aa02bf636339c5a93f9349b48eb1f606f7f3e9"}, + {file = "lxml-5.3.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:516f491c834eb320d6c843156440fe7fc0d50b33e44387fcec5b02f0bc118a4c"}, + {file = "lxml-5.3.0.tar.gz", hash = "sha256:4e109ca30d1edec1ac60cdbe341905dc3b8f55b16855e03a54aaf59e51ec8c6f"}, ] [package.extras] cssselect = ["cssselect (>=0.7)"] +html-clean = ["lxml-html-clean"] html5 = ["html5lib"] htmlsoup = ["BeautifulSoup4"] -source = ["Cython (==0.29.37)"] +source = ["Cython (>=3.0.11)"] [[package]] name = "markdown" @@ -2446,25 +2472,6 @@ files = [ {file = "markupsafe-3.0.2.tar.gz", hash = "sha256:ee55d3edf80167e48ea11a923c7386f4669df67d7994554387f84e7d8b0a2bf0"}, ] -[[package]] -name = "marshmallow" -version = "3.23.1" -description = "A lightweight library for converting complex datatypes to and from native Python datatypes." -optional = false -python-versions = ">=3.9" -files = [ - {file = "marshmallow-3.23.1-py3-none-any.whl", hash = "sha256:fece2eb2c941180ea1b7fcbd4a83c51bfdd50093fdd3ad2585ee5e1df2508491"}, - {file = "marshmallow-3.23.1.tar.gz", hash = "sha256:3a8dfda6edd8dcdbf216c0ede1d1e78d230a6dc9c5a088f58c4083b974a0d468"}, -] - -[package.dependencies] -packaging = ">=17.0" - -[package.extras] -dev = ["marshmallow[tests]", "pre-commit (>=3.5,<5.0)", "tox"] -docs = ["alabaster (==1.0.0)", "autodocsumm (==0.2.14)", "sphinx (==8.1.3)", "sphinx-issues (==5.0.0)", "sphinx-version-warning (==1.1.2)"] -tests = ["pytest", "simplejson"] - [[package]] name = "matplotlib-inline" version = "0.1.7" @@ -2642,13 +2649,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.45" +version = "9.5.46" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.45-py3-none-any.whl", hash = "sha256:a9be237cfd0be14be75f40f1726d83aa3a81ce44808dc3594d47a7a592f44547"}, - {file = "mkdocs_material-9.5.45.tar.gz", hash = "sha256:286489cf0beca4a129d91d59d6417419c63bceed1ce5cd0ec1fc7e1ebffb8189"}, + {file = "mkdocs_material-9.5.46-py3-none-any.whl", hash = "sha256:98f0a2039c62e551a68aad0791a8d41324ff90c03a6e6cea381a384b84908b83"}, + {file = "mkdocs_material-9.5.46.tar.gz", hash = "sha256:ae2043f4238e572f9a40e0b577f50400d6fc31e2fef8ea141800aebf3bd273d7"}, ] [package.dependencies] @@ -3057,30 +3064,32 @@ files = [ [[package]] name = "ninja" -version = "1.11.1.1" +version = "1.11.1.2" description = "Ninja is a small build system with a focus on speed" optional = false -python-versions = "*" +python-versions = ">=3.7" files = [ - {file = "ninja-1.11.1.1-py2.py3-none-macosx_10_9_universal2.macosx_10_9_x86_64.macosx_11_0_arm64.macosx_11_0_universal2.whl", hash = "sha256:376889c76d87b95b5719fdd61dd7db193aa7fd4432e5d52d2e44e4c497bdbbee"}, - {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_i686.manylinux_2_5_i686.whl", hash = "sha256:ecf80cf5afd09f14dcceff28cb3f11dc90fb97c999c89307aea435889cb66877"}, - {file = "ninja-1.11.1.1-py2.py3-none-manylinux1_x86_64.manylinux_2_5_x86_64.whl", hash = "sha256:84502ec98f02a037a169c4b0d5d86075eaf6afc55e1879003d6cab51ced2ea4b"}, - {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:73b93c14046447c7c5cc892433d4fae65d6364bec6685411cb97a8bcf815f93a"}, - {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_ppc64le.manylinux_2_17_ppc64le.whl", hash = "sha256:18302d96a5467ea98b68e1cae1ae4b4fb2b2a56a82b955193c637557c7273dbd"}, - {file = "ninja-1.11.1.1-py2.py3-none-manylinux2014_s390x.manylinux_2_17_s390x.whl", hash = "sha256:aad34a70ef15b12519946c5633344bc775a7656d789d9ed5fdb0d456383716ef"}, - {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:d491fc8d89cdcb416107c349ad1e3a735d4c4af5e1cb8f5f727baca6350fdaea"}, - {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_i686.whl", hash = "sha256:7563ce1d9fe6ed5af0b8dd9ab4a214bf4ff1f2f6fd6dc29f480981f0f8b8b249"}, - {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:9df724344202b83018abb45cb1efc22efd337a1496514e7e6b3b59655be85205"}, - {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_s390x.whl", hash = "sha256:3e0f9be5bb20d74d58c66cc1c414c3e6aeb45c35b0d0e41e8d739c2c0d57784f"}, - {file = "ninja-1.11.1.1-py2.py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:76482ba746a2618eecf89d5253c0d1e4f1da1270d41e9f54dfbd91831b0f6885"}, - {file = "ninja-1.11.1.1-py2.py3-none-win32.whl", hash = "sha256:fa2ba9d74acfdfbfbcf06fad1b8282de8a7a8c481d9dee45c859a8c93fcc1082"}, - {file = "ninja-1.11.1.1-py2.py3-none-win_amd64.whl", hash = "sha256:95da904130bfa02ea74ff9c0116b4ad266174fafb1c707aa50212bc7859aebf1"}, - {file = "ninja-1.11.1.1-py2.py3-none-win_arm64.whl", hash = "sha256:185e0641bde601e53841525c4196278e9aaf4463758da6dd1e752c0a0f54136a"}, - {file = "ninja-1.11.1.1.tar.gz", hash = "sha256:9d793b08dd857e38d0b6ffe9e6b7145d7c485a42dcfea04905ca0cdb6017cc3c"}, + {file = "ninja-1.11.1.2-py3-none-macosx_10_9_universal2.whl", hash = "sha256:1cfbb845095ea09da8c089375a8f999e75f4817d01506297c66181b533175647"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:ab4068ff7ff1f895485ad604116165b05d6810c802170a7f22c09dd678d5587d"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:33d258809c8eda81f9d80e18a081a6eef3215e5fd1ba8902400d786641994e89"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ed25892c16e49e66383a8db6a67a9f33b41230fc485426094d7da51e2255ec2b"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:232767144401847db62e8392047866698bb3678158a1ae4400a97111110e90f2"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9200247cf4c1643a67d079836b8dd31a362e34e618b50b5e3a5c0d0171efc442"}, + {file = "ninja-1.11.1.2-py3-none-manylinux_2_28_armv7l.manylinux_2_31_armv7l.whl", hash = "sha256:0c9c36f6e6f8946c7271b0ed14d98fc3ea467a0c0954fb73f5f656c42667d943"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_aarch64.whl", hash = "sha256:3e815e4147832b17ec38417efcb31df51671ae273f083409304c7cc32a14dd1a"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_i686.whl", hash = "sha256:ecf3df324b56fdfb0872990a71e706efdae286e010310816c72b6bf24431711b"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_ppc64le.whl", hash = "sha256:cb6b476eb4e84c0efcfd3ab04f660dedce8adb854b56b043639312f3af176df6"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_s390x.whl", hash = "sha256:508fb93395a5c82a4d99d30fce0cbaf5cb2bd33e5c1dc9faaa080e199802dbc9"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_1_x86_64.whl", hash = "sha256:52af7f45750c5c288d566fd0c927ed9bb0d8f2e50803709f582a42bcc4ec167b"}, + {file = "ninja-1.11.1.2-py3-none-musllinux_1_2_armv7l.whl", hash = "sha256:99fc4b87299242e10d7edd1c7737fdfb1269019e32f9f4267630887f6183a49e"}, + {file = "ninja-1.11.1.2-py3-none-win32.whl", hash = "sha256:949e23cb2e79a33ea37d23a07d26846d2e75464e8e6940f8751fe964bc141dfa"}, + {file = "ninja-1.11.1.2-py3-none-win_amd64.whl", hash = "sha256:0bca4179119426a3c3c9d5661c3b244d68781064e50907a1e066bc55edc18e06"}, + {file = "ninja-1.11.1.2-py3-none-win_arm64.whl", hash = "sha256:ee7b1924c28e6cab5b866f7b229f07777d25d8cfccbbedf3da5ffb4f72f57877"}, + {file = "ninja-1.11.1.2.tar.gz", hash = "sha256:4fbd07b2b4232543726abafdd350453a2fabef4527664ca0e491c578aee5f857"}, ] [package.extras] -test = ["codecov (>=2.0.5)", "coverage (>=4.2)", "flake8 (>=3.0.4)", "pytest (>=4.5.0)", "pytest-cov (>=2.7.1)", "pytest-runner (>=5.1)", "pytest-virtualenv (>=1.7.0)", "virtualenv (>=15.0.3)"] +test = ["coverage (>=4.2)", "importlib_metadata (>=2.0)", "pytest (>=6.0)", "pytest-cov (>=3)"] [[package]] name = "nodeenv" @@ -3466,14 +3475,14 @@ files = [ [[package]] name = "nvidia-nvjitlink-cu12" -version = "12.6.77" +version = "12.6.85" description = "Nvidia JIT LTO Library" optional = false python-versions = ">=3" files = [ - {file = "nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_aarch64.whl", hash = "sha256:3bf10d85bb1801e9c894c6e197e44dd137d2a0a9e43f8450e9ad13f2df0dd52d"}, - {file = "nvidia_nvjitlink_cu12-12.6.77-py3-none-manylinux2014_x86_64.whl", hash = "sha256:9ae346d16203ae4ea513be416495167a0101d33d2d14935aa9c1829a3fb45142"}, - {file = "nvidia_nvjitlink_cu12-12.6.77-py3-none-win_amd64.whl", hash = "sha256:410718cd44962bed862a31dd0318620f6f9a8b28a6291967bcfcb446a6516771"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2010_x86_64.manylinux_2_12_x86_64.whl", hash = "sha256:eedc36df9e88b682efe4309aa16b5b4e78c2407eac59e8c10a6a47535164369a"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-manylinux2014_aarch64.manylinux_2_17_aarch64.whl", hash = "sha256:cf4eaa7d4b6b543ffd69d6abfb11efdeb2db48270d94dfd3a452c24150829e41"}, + {file = "nvidia_nvjitlink_cu12-12.6.85-py3-none-win_amd64.whl", hash = "sha256:e61120e52ed675747825cdd16febc6a0730537451d867ee58bee3853b1b13d1c"}, ] [[package]] @@ -3557,69 +3566,86 @@ et-xmlfile = "*" [[package]] name = "orjson" -version = "3.10.11" +version = "3.10.12" description = "Fast, correct Python JSON library supporting dataclasses, datetimes, and numpy" optional = false python-versions = ">=3.8" files = [ - {file = "orjson-3.10.11-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:6dade64687f2bd7c090281652fe18f1151292d567a9302b34c2dbb92a3872f1f"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82f07c550a6ccd2b9290849b22316a609023ed851a87ea888c0456485a7d196a"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bd9a187742d3ead9df2e49240234d728c67c356516cf4db018833a86f20ec18c"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:77b0fed6f209d76c1c39f032a70df2d7acf24b1812ca3e6078fd04e8972685a3"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:63fc9d5fe1d4e8868f6aae547a7b8ba0a2e592929245fff61d633f4caccdcdd6"}, - {file = "orjson-3.10.11-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:65cd3e3bb4fbb4eddc3c1e8dce10dc0b73e808fcb875f9fab40c81903dd9323e"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:6f67c570602300c4befbda12d153113b8974a3340fdcf3d6de095ede86c06d92"}, - {file = "orjson-3.10.11-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:1f39728c7f7d766f1f5a769ce4d54b5aaa4c3f92d5b84817053cc9995b977acc"}, - {file = "orjson-3.10.11-cp310-none-win32.whl", hash = "sha256:1789d9db7968d805f3d94aae2c25d04014aae3a2fa65b1443117cd462c6da647"}, - {file = "orjson-3.10.11-cp310-none-win_amd64.whl", hash = "sha256:5576b1e5a53a5ba8f8df81872bb0878a112b3ebb1d392155f00f54dd86c83ff6"}, - {file = "orjson-3.10.11-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:1444f9cb7c14055d595de1036f74ecd6ce15f04a715e73f33bb6326c9cef01b6"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cdec57fe3b4bdebcc08a946db3365630332dbe575125ff3d80a3272ebd0ddafe"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4eed32f33a0ea6ef36ccc1d37f8d17f28a1d6e8eefae5928f76aff8f1df85e67"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:80df27dd8697242b904f4ea54820e2d98d3f51f91e97e358fc13359721233e4b"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:705f03cee0cb797256d54de6695ef219e5bc8c8120b6654dd460848d57a9af3d"}, - {file = "orjson-3.10.11-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:03246774131701de8e7059b2e382597da43144a9a7400f178b2a32feafc54bd5"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8b5759063a6c940a69c728ea70d7c33583991c6982915a839c8da5f957e0103a"}, - {file = "orjson-3.10.11-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:677f23e32491520eebb19c99bb34675daf5410c449c13416f7f0d93e2cf5f981"}, - {file = "orjson-3.10.11-cp311-none-win32.whl", hash = "sha256:a11225d7b30468dcb099498296ffac36b4673a8398ca30fdaec1e6c20df6aa55"}, - {file = "orjson-3.10.11-cp311-none-win_amd64.whl", hash = "sha256:df8c677df2f9f385fcc85ab859704045fa88d4668bc9991a527c86e710392bec"}, - {file = "orjson-3.10.11-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:360a4e2c0943da7c21505e47cf6bd725588962ff1d739b99b14e2f7f3545ba51"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:496e2cb45de21c369079ef2d662670a4892c81573bcc143c4205cae98282ba97"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:7dfa8db55c9792d53c5952900c6a919cfa377b4f4534c7a786484a6a4a350c19"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:51f3382415747e0dbda9dade6f1e1a01a9d37f630d8c9049a8ed0e385b7a90c0"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f35a1b9f50a219f470e0e497ca30b285c9f34948d3c8160d5ad3a755d9299433"}, - {file = "orjson-3.10.11-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e2f3b7c5803138e67028dde33450e054c87e0703afbe730c105f1fcd873496d5"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f91d9eb554310472bd09f5347950b24442600594c2edc1421403d7610a0998fd"}, - {file = "orjson-3.10.11-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:dfbb2d460a855c9744bbc8e36f9c3a997c4b27d842f3d5559ed54326e6911f9b"}, - {file = "orjson-3.10.11-cp312-none-win32.whl", hash = "sha256:d4a62c49c506d4d73f59514986cadebb7e8d186ad510c518f439176cf8d5359d"}, - {file = "orjson-3.10.11-cp312-none-win_amd64.whl", hash = "sha256:f1eec3421a558ff7a9b010a6c7effcfa0ade65327a71bb9b02a1c3b77a247284"}, - {file = "orjson-3.10.11-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c46294faa4e4d0eb73ab68f1a794d2cbf7bab33b1dda2ac2959ffb7c61591899"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:52e5834d7d6e58a36846e059d00559cb9ed20410664f3ad156cd2cc239a11230"}, - {file = "orjson-3.10.11-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2fc947e5350fdce548bfc94f434e8760d5cafa97fb9c495d2fef6757aa02ec0"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0efabbf839388a1dab5b72b5d3baedbd6039ac83f3b55736eb9934ea5494d258"}, - {file = "orjson-3.10.11-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a3f29634260708c200c4fe148e42b4aae97d7b9fee417fbdd74f8cfc265f15b0"}, - {file = "orjson-3.10.11-cp313-none-win32.whl", hash = "sha256:1a1222ffcee8a09476bbdd5d4f6f33d06d0d6642df2a3d78b7a195ca880d669b"}, - {file = "orjson-3.10.11-cp313-none-win_amd64.whl", hash = "sha256:bc274ac261cc69260913b2d1610760e55d3c0801bb3457ba7b9004420b6b4270"}, - {file = "orjson-3.10.11-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:19b3763e8bbf8ad797df6b6b5e0fc7c843ec2e2fc0621398534e0c6400098f87"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1be83a13312e5e58d633580c5eb8d0495ae61f180da2722f20562974188af205"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:afacfd1ab81f46dedd7f6001b6d4e8de23396e4884cd3c3436bd05defb1a6446"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cb4d0bea56bba596723d73f074c420aec3b2e5d7d30698bc56e6048066bd560c"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:96ed1de70fcb15d5fed529a656df29f768187628727ee2788344e8a51e1c1350"}, - {file = "orjson-3.10.11-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4bfb30c891b530f3f80e801e3ad82ef150b964e5c38e1fb8482441c69c35c61c"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:d496c74fc2b61341e3cefda7eec21b7854c5f672ee350bc55d9a4997a8a95204"}, - {file = "orjson-3.10.11-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:655a493bac606655db9a47fe94d3d84fc7f3ad766d894197c94ccf0c5408e7d3"}, - {file = "orjson-3.10.11-cp38-none-win32.whl", hash = "sha256:b9546b278c9fb5d45380f4809e11b4dd9844ca7aaf1134024503e134ed226161"}, - {file = "orjson-3.10.11-cp38-none-win_amd64.whl", hash = "sha256:b592597fe551d518f42c5a2eb07422eb475aa8cfdc8c51e6da7054b836b26782"}, - {file = "orjson-3.10.11-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:c95f2ecafe709b4e5c733b5e2768ac569bed308623c85806c395d9cca00e08af"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:80c00d4acded0c51c98754fe8218cb49cb854f0f7eb39ea4641b7f71732d2cb7"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:461311b693d3d0a060439aa669c74f3603264d4e7a08faa68c47ae5a863f352d"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:52ca832f17d86a78cbab86cdc25f8c13756ebe182b6fc1a97d534051c18a08de"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f4c57ea78a753812f528178aa2f1c57da633754c91d2124cb28991dab4c79a54"}, - {file = "orjson-3.10.11-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b7fcfc6f7ca046383fb954ba528587e0f9336828b568282b27579c49f8e16aad"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:86b9dd983857970c29e4c71bb3e95ff085c07d3e83e7c46ebe959bac07ebd80b"}, - {file = "orjson-3.10.11-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:4d83f87582d223e54efb2242a79547611ba4ebae3af8bae1e80fa9a0af83bb7f"}, - {file = "orjson-3.10.11-cp39-none-win32.whl", hash = "sha256:9fd0ad1c129bc9beb1154c2655f177620b5beaf9a11e0d10bac63ef3fce96950"}, - {file = "orjson-3.10.11-cp39-none-win_amd64.whl", hash = "sha256:10f416b2a017c8bd17f325fb9dee1fb5cdd7a54e814284896b7c3f2763faa017"}, - {file = "orjson-3.10.11.tar.gz", hash = "sha256:e35b6d730de6384d5b2dab5fd23f0d76fae8bbc8c353c2f78210aa5fa4beb3ef"}, + {file = "orjson-3.10.12-cp310-cp310-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:ece01a7ec71d9940cc654c482907a6b65df27251255097629d0dea781f255c6d"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c34ec9aebc04f11f4b978dd6caf697a2df2dd9b47d35aa4cc606cabcb9df69d7"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fd6ec8658da3480939c79b9e9e27e0db31dffcd4ba69c334e98c9976ac29140e"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f17e6baf4cf01534c9de8a16c0c611f3d94925d1701bf5f4aff17003677d8ced"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6402ebb74a14ef96f94a868569f5dccf70d791de49feb73180eb3c6fda2ade56"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0000758ae7c7853e0a4a6063f534c61656ebff644391e1f81698c1b2d2fc8cd2"}, + {file = "orjson-3.10.12-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:888442dcee99fd1e5bd37a4abb94930915ca6af4db50e23e746cdf4d1e63db13"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c1f7a3ce79246aa0e92f5458d86c54f257fb5dfdc14a192651ba7ec2c00f8a05"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:802a3935f45605c66fb4a586488a38af63cb37aaad1c1d94c982c40dcc452e85"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:1da1ef0113a2be19bb6c557fb0ec2d79c92ebd2fed4cfb1b26bab93f021fb885"}, + {file = "orjson-3.10.12-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7a3273e99f367f137d5b3fecb5e9f45bcdbfac2a8b2f32fbc72129bbd48789c2"}, + {file = "orjson-3.10.12-cp310-none-win32.whl", hash = "sha256:475661bf249fd7907d9b0a2a2421b4e684355a77ceef85b8352439a9163418c3"}, + {file = "orjson-3.10.12-cp310-none-win_amd64.whl", hash = "sha256:87251dc1fb2b9e5ab91ce65d8f4caf21910d99ba8fb24b49fd0c118b2362d509"}, + {file = "orjson-3.10.12-cp311-cp311-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:a734c62efa42e7df94926d70fe7d37621c783dea9f707a98cdea796964d4cf74"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:750f8b27259d3409eda8350c2919a58b0cfcd2054ddc1bd317a643afc646ef23"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb52c22bfffe2857e7aa13b4622afd0dd9d16ea7cc65fd2bf318d3223b1b6252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:440d9a337ac8c199ff8251e100c62e9488924c92852362cd27af0e67308c16ef"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9e15c06491c69997dfa067369baab3bf094ecb74be9912bdc4339972323f252"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:362d204ad4b0b8724cf370d0cd917bb2dc913c394030da748a3bb632445ce7c4"}, + {file = "orjson-3.10.12-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b57cbb4031153db37b41622eac67329c7810e5f480fda4cfd30542186f006ae"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:165c89b53ef03ce0d7c59ca5c82fa65fe13ddf52eeb22e859e58c237d4e33b9b"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:5dee91b8dfd54557c1a1596eb90bcd47dbcd26b0baaed919e6861f076583e9da"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:77a4e1cfb72de6f905bdff061172adfb3caf7a4578ebf481d8f0530879476c07"}, + {file = "orjson-3.10.12-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:038d42c7bc0606443459b8fe2d1f121db474c49067d8d14c6a075bbea8bf14dd"}, + {file = "orjson-3.10.12-cp311-none-win32.whl", hash = "sha256:03b553c02ab39bed249bedd4abe37b2118324d1674e639b33fab3d1dafdf4d79"}, + {file = "orjson-3.10.12-cp311-none-win_amd64.whl", hash = "sha256:8b8713b9e46a45b2af6b96f559bfb13b1e02006f4242c156cbadef27800a55a8"}, + {file = "orjson-3.10.12-cp312-cp312-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:53206d72eb656ca5ac7d3a7141e83c5bbd3ac30d5eccfe019409177a57634b0d"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ac8010afc2150d417ebda810e8df08dd3f544e0dd2acab5370cfa6bcc0662f8f"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed459b46012ae950dd2e17150e838ab08215421487371fa79d0eced8d1461d70"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8dcb9673f108a93c1b52bfc51b0af422c2d08d4fc710ce9c839faad25020bb69"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:22a51ae77680c5c4652ebc63a83d5255ac7d65582891d9424b566fb3b5375ee9"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:910fdf2ac0637b9a77d1aad65f803bac414f0b06f720073438a7bd8906298192"}, + {file = "orjson-3.10.12-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:24ce85f7100160936bc2116c09d1a8492639418633119a2224114f67f63a4559"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:8a76ba5fc8dd9c913640292df27bff80a685bed3a3c990d59aa6ce24c352f8fc"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ff70ef093895fd53f4055ca75f93f047e088d1430888ca1229393a7c0521100f"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f4244b7018b5753ecd10a6d324ec1f347da130c953a9c88432c7fbc8875d13be"}, + {file = "orjson-3.10.12-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:16135ccca03445f37921fa4b585cff9a58aa8d81ebcb27622e69bfadd220b32c"}, + {file = "orjson-3.10.12-cp312-none-win32.whl", hash = "sha256:2d879c81172d583e34153d524fcba5d4adafbab8349a7b9f16ae511c2cee8708"}, + {file = "orjson-3.10.12-cp312-none-win_amd64.whl", hash = "sha256:fc23f691fa0f5c140576b8c365bc942d577d861a9ee1142e4db468e4e17094fb"}, + {file = "orjson-3.10.12-cp313-cp313-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:47962841b2a8aa9a258b377f5188db31ba49af47d4003a32f55d6f8b19006543"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6334730e2532e77b6054e87ca84f3072bee308a45a452ea0bffbbbc40a67e296"}, + {file = "orjson-3.10.12-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:accfe93f42713c899fdac2747e8d0d5c659592df2792888c6c5f829472e4f85e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a7974c490c014c48810d1dede6c754c3cc46598da758c25ca3b4001ac45b703f"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3f250ce7727b0b2682f834a3facff88e310f52f07a5dcfd852d99637d386e79e"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:f31422ff9486ae484f10ffc51b5ab2a60359e92d0716fcce1b3593d7bb8a9af6"}, + {file = "orjson-3.10.12-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:5f29c5d282bb2d577c2a6bbde88d8fdcc4919c593f806aac50133f01b733846e"}, + {file = "orjson-3.10.12-cp313-none-win32.whl", hash = "sha256:f45653775f38f63dc0e6cd4f14323984c3149c05d6007b58cb154dd080ddc0dc"}, + {file = "orjson-3.10.12-cp313-none-win_amd64.whl", hash = "sha256:229994d0c376d5bdc91d92b3c9e6be2f1fbabd4cc1b59daae1443a46ee5e9825"}, + {file = "orjson-3.10.12-cp38-cp38-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:7d69af5b54617a5fac5c8e5ed0859eb798e2ce8913262eb522590239db6c6763"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ed119ea7d2953365724a7059231a44830eb6bbb0cfead33fcbc562f5fd8f935"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:9c5fc1238ef197e7cad5c91415f524aaa51e004be5a9b35a1b8a84ade196f73f"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:43509843990439b05f848539d6f6198d4ac86ff01dd024b2f9a795c0daeeab60"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f72e27a62041cfb37a3de512247ece9f240a561e6c8662276beaf4d53d406db4"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9a904f9572092bb6742ab7c16c623f0cdccbad9eeb2d14d4aa06284867bddd31"}, + {file = "orjson-3.10.12-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:855c0833999ed5dc62f64552db26f9be767434917d8348d77bacaab84f787d7b"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:897830244e2320f6184699f598df7fb9db9f5087d6f3f03666ae89d607e4f8ed"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:0b32652eaa4a7539f6f04abc6243619c56f8530c53bf9b023e1269df5f7816dd"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:36b4aa31e0f6a1aeeb6f8377769ca5d125db000f05c20e54163aef1d3fe8e833"}, + {file = "orjson-3.10.12-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:5535163054d6cbf2796f93e4f0dbc800f61914c0e3c4ed8499cf6ece22b4a3da"}, + {file = "orjson-3.10.12-cp38-none-win32.whl", hash = "sha256:90a5551f6f5a5fa07010bf3d0b4ca2de21adafbbc0af6cb700b63cd767266cb9"}, + {file = "orjson-3.10.12-cp38-none-win_amd64.whl", hash = "sha256:703a2fb35a06cdd45adf5d733cf613cbc0cb3ae57643472b16bc22d325b5fb6c"}, + {file = "orjson-3.10.12-cp39-cp39-macosx_10_15_x86_64.macosx_11_0_arm64.macosx_10_15_universal2.whl", hash = "sha256:f29de3ef71a42a5822765def1febfb36e0859d33abf5c2ad240acad5c6a1b78d"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:de365a42acc65d74953f05e4772c974dad6c51cfc13c3240899f534d611be967"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:91a5a0158648a67ff0004cb0df5df7dcc55bfc9ca154d9c01597a23ad54c8d0c"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c47ce6b8d90fe9646a25b6fb52284a14ff215c9595914af63a5933a49972ce36"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0eee4c2c5bfb5c1b47a5db80d2ac7aaa7e938956ae88089f098aff2c0f35d5d8"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:35d3081bbe8b86587eb5c98a73b97f13d8f9fea685cf91a579beddacc0d10566"}, + {file = "orjson-3.10.12-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:73c23a6e90383884068bc2dba83d5222c9fcc3b99a0ed2411d38150734236755"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:5472be7dc3269b4b52acba1433dac239215366f89dc1d8d0e64029abac4e714e"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:7319cda750fca96ae5973efb31b17d97a5c5225ae0bc79bf5bf84df9e1ec2ab6"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:74d5ca5a255bf20b8def6a2b96b1e18ad37b4a122d59b154c458ee9494377f80"}, + {file = "orjson-3.10.12-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ff31d22ecc5fb85ef62c7d4afe8301d10c558d00dd24274d4bbe464380d3cd69"}, + {file = "orjson-3.10.12-cp39-none-win32.whl", hash = "sha256:c22c3ea6fba91d84fcb4cda30e64aff548fcf0c44c876e681f47d61d24b12e6b"}, + {file = "orjson-3.10.12-cp39-none-win_amd64.whl", hash = "sha256:be604f60d45ace6b0b33dd990a66b4526f1a7a186ac411c942674625456ca548"}, + {file = "orjson-3.10.12.tar.gz", hash = "sha256:0a78bbda3aea0f9f079057ee1ee8a1ecf790d4f1af88dd67493c6b8ee52506ff"}, ] [[package]] @@ -4503,21 +4529,21 @@ extra = ["pygments (>=2.12)"] [[package]] name = "pymilvus" -version = "2.4.9" +version = "2.5.0" description = "Python Sdk for Milvus" optional = false python-versions = ">=3.8" files = [ - {file = "pymilvus-2.4.9-py3-none-any.whl", hash = "sha256:45313607d2c164064bdc44e0f933cb6d6afa92e9efcc7f357c5240c57db58fbe"}, - {file = "pymilvus-2.4.9.tar.gz", hash = "sha256:0937663700007c23a84cfc0656160b301f6ff9247aaec4c96d599a6b43572136"}, + {file = "pymilvus-2.5.0-py3-none-any.whl", hash = "sha256:a0e8653d8fe78019abfda79b3404ef7423f312501e8cbd7dc728051ce8732652"}, + {file = "pymilvus-2.5.0.tar.gz", hash = "sha256:4da14a3bd957a4921166f9355fd1f1ac5c5e4e80b46f12f64d9c9a6dcb8cb395"}, ] [package.dependencies] -environs = "<=9.5.0" -grpcio = ">=1.49.1" -milvus-lite = {version = ">=2.4.0,<2.5.0", markers = "sys_platform != \"win32\""} +grpcio = ">=1.49.1,<=1.67.1" +milvus-lite = {version = ">=2.4.0", markers = "sys_platform != \"win32\""} pandas = ">=1.2.4" protobuf = ">=3.20.0" +python-dotenv = ">=1.0.1,<2.0.0" setuptools = ">69" ujson = ">=2.0.0" @@ -5715,11 +5741,6 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, - {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -5840,23 +5861,23 @@ train = ["accelerate (>=0.20.3)", "datasets"] [[package]] name = "setuptools" -version = "75.5.0" +version = "75.6.0" description = "Easily download, build, install, upgrade, and uninstall Python packages" optional = false python-versions = ">=3.9" files = [ - {file = "setuptools-75.5.0-py3-none-any.whl", hash = "sha256:87cb777c3b96d638ca02031192d40390e0ad97737e27b6b4fa831bea86f2f829"}, - {file = "setuptools-75.5.0.tar.gz", hash = "sha256:5c4ccb41111392671f02bb5f8436dfc5a9a7185e80500531b133f5775c4163ef"}, + {file = "setuptools-75.6.0-py3-none-any.whl", hash = "sha256:ce74b49e8f7110f9bf04883b730f4765b774ef3ef28f722cce7c273d253aaf7d"}, + {file = "setuptools-75.6.0.tar.gz", hash = "sha256:8199222558df7c86216af4f84c30e9b34a61d8ba19366cc914424cdbd28252f6"}, ] [package.extras] check = ["pytest-checkdocs (>=2.4)", "pytest-ruff (>=0.2.1)", "ruff (>=0.7.0)"] -core = ["importlib-metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more-itertools", "more-itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] +core = ["importlib_metadata (>=6)", "jaraco.collections", "jaraco.functools (>=4)", "jaraco.text (>=3.7)", "more_itertools", "more_itertools (>=8.8)", "packaging", "packaging (>=24.2)", "platformdirs (>=4.2.2)", "tomli (>=2.0.1)", "wheel (>=0.43.0)"] cover = ["pytest-cov"] doc = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "pyproject-hooks (!=1.1)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier", "towncrier (<24.7)"] enabler = ["pytest-enabler (>=2.2)"] test = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "ini2toml[lite] (>=0.14)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "jaraco.test (>=5.5)", "packaging (>=24.2)", "pip (>=19.1)", "pyproject-hooks (!=1.1)", "pytest (>=6,!=8.1.*)", "pytest-home (>=0.5)", "pytest-perf", "pytest-subprocess", "pytest-timeout", "pytest-xdist (>=3)", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel (>=0.44.0)"] -type = ["importlib-metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] +type = ["importlib_metadata (>=7.0.2)", "jaraco.develop (>=7.21)", "mypy (>=1.12,<1.14)", "pytest-mypy"] [[package]] name = "shapely" @@ -6152,123 +6173,26 @@ files = [ [[package]] name = "tokenizers" -version = "0.20.3" +version = "0.20.4" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, - {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, - {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, - {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, - {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, - {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, - {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, - {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, - {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, - {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, - {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, - {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, - {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, - {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, - {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, - {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, - {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, + {file = "tokenizers-0.20.4-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:25f59ebc5b79e7bbafe86bfec62696468016627157d8a9ceba5092486796a156"}, + {file = "tokenizers-0.20.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f41df992797ad0ff9472e8a2c7a3ef7178667935d984639b73da7d19b33ea4e2"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7786004e180fab72e6e873e982ccd18b3cfa31521d397b6c024cc19175abf91b"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:075635cd7e6936cc4b3a13901c1a05690d5b533ce3d0f035dee21117dd4f04ae"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa392bae7f0a36e4c97ad43100390ad84f2a1bfff6742604774210f7d7a4fa13"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eee647ccba9cbd36b5ec4e8e73d25dbd586ec06de7a43ff83a3dad9fec466a29"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:735ffc9bba65d20f8ab5f82dfbab262bb066afc7dee3684c5e5435e7a5da445d"}, + {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05c2bab579c1f31292b48bb79b6334b5346c1ec87dac81089e6098b8a20b2fd4"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3e960ad5c467a95e5665e518151ed9024e7aa111d2c54ff1938162cc7c2b8959"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e59a405459ed31b73426b364752c2e7c73f4a94210a63fd7acd161a774af7bd2"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:84bf8b4a7bbf1c6bb78775ae309a5c69d08dadf7b88125d6d19ccb4738a87350"}, + {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a6d392a20ca70692aaba8a636677b57f6c67655879773ba2b6be8cb4a19ce6b8"}, + {file = "tokenizers-0.20.4-cp39-abi3-win32.whl", hash = "sha256:60ea37c885a9bb8efa53b7542ea83561cd00eb3ffb47a77f5ae622d9f7f66ffe"}, + {file = "tokenizers-0.20.4-cp39-abi3-win_amd64.whl", hash = "sha256:6cba92b87969ddf5a7e2f2293577c30129d8c22c6f68e8c626d3e76b8d52412c"}, + {file = "tokenizers-0.20.4.tar.gz", hash = "sha256:db50ac15e92981227f499268541306824f49e97dbeec05d118ebdc7c2d22322c"}, ] [package.dependencies] @@ -6489,40 +6413,40 @@ scipy = ["scipy"] [[package]] name = "tornado" -version = "6.4.1" +version = "6.4.2" description = "Tornado is a Python web framework and asynchronous networking library, originally developed at FriendFeed." optional = false python-versions = ">=3.8" files = [ - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:163b0aafc8e23d8cdc3c9dfb24c5368af84a81e3364745ccb4427669bf84aec8"}, - {file = "tornado-6.4.1-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:6d5ce3437e18a2b66fbadb183c1d3364fb03f2be71299e7d10dbeeb69f4b2a14"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e2e20b9113cd7293f164dc46fffb13535266e713cdb87bd2d15ddb336e96cfc4"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8ae50a504a740365267b2a8d1a90c9fbc86b780a39170feca9bcc1787ff80842"}, - {file = "tornado-6.4.1-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:613bf4ddf5c7a95509218b149b555621497a6cc0d46ac341b30bd9ec19eac7f3"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:25486eb223babe3eed4b8aecbac33b37e3dd6d776bc730ca14e1bf93888b979f"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:454db8a7ecfcf2ff6042dde58404164d969b6f5d58b926da15e6b23817950fc4"}, - {file = "tornado-6.4.1-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a02a08cc7a9314b006f653ce40483b9b3c12cda222d6a46d4ac63bb6c9057698"}, - {file = "tornado-6.4.1-cp38-abi3-win32.whl", hash = "sha256:d9a566c40b89757c9aa8e6f032bcdb8ca8795d7c1a9762910c722b1635c9de4d"}, - {file = "tornado-6.4.1-cp38-abi3-win_amd64.whl", hash = "sha256:b24b8982ed444378d7f21d563f4180a2de31ced9d8d84443907a0a64da2072e7"}, - {file = "tornado-6.4.1.tar.gz", hash = "sha256:92d3ab53183d8c50f8204a51e6f91d18a15d5ef261e84d452800d4ff6fc504e9"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:e828cce1123e9e44ae2a50a9de3055497ab1d0aeb440c5ac23064d9e44880da1"}, + {file = "tornado-6.4.2-cp38-abi3-macosx_10_9_x86_64.whl", hash = "sha256:072ce12ada169c5b00b7d92a99ba089447ccc993ea2143c9ede887e0937aa803"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a017d239bd1bb0919f72af256a970624241f070496635784d9bf0db640d3fec"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c36e62ce8f63409301537222faffcef7dfc5284f27eec227389f2ad11b09d946"}, + {file = "tornado-6.4.2-cp38-abi3-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bca9eb02196e789c9cb5c3c7c0f04fb447dc2adffd95265b2c7223a8a615ccbf"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:304463bd0772442ff4d0f5149c6f1c2135a1fae045adf070821c6cdc76980634"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:c82c46813ba483a385ab2a99caeaedf92585a1f90defb5693351fa7e4ea0bf73"}, + {file = "tornado-6.4.2-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:932d195ca9015956fa502c6b56af9eb06106140d844a335590c1ec7f5277d10c"}, + {file = "tornado-6.4.2-cp38-abi3-win32.whl", hash = "sha256:2876cef82e6c5978fde1e0d5b1f919d756968d5b4282418f3146b79b58556482"}, + {file = "tornado-6.4.2-cp38-abi3-win_amd64.whl", hash = "sha256:908b71bf3ff37d81073356a5fadcc660eb10c1476ee6e2725588626ce7e5ca38"}, + {file = "tornado-6.4.2.tar.gz", hash = "sha256:92bad5b4746e9879fd7bf1eb21dce4e3fc5128d71601f80005afa39237ad620b"}, ] [[package]] name = "tqdm" -version = "4.67.0" +version = "4.67.1" description = "Fast, Extensible Progress Meter" optional = false python-versions = ">=3.7" files = [ - {file = "tqdm-4.67.0-py3-none-any.whl", hash = "sha256:0cd8af9d56911acab92182e88d763100d4788bdf421d251616040cc4d44863be"}, - {file = "tqdm-4.67.0.tar.gz", hash = "sha256:fe5a6f95e6fe0b9755e9469b77b9c3cf850048224ecaa8293d7d2d31f97d869a"}, + {file = "tqdm-4.67.1-py3-none-any.whl", hash = "sha256:26445eca388f82e72884e0d580d5464cd801a3ea01e63e5601bdff9ba6a48de2"}, + {file = "tqdm-4.67.1.tar.gz", hash = "sha256:f8aef9c52c08c13a65f30ea34f4e5aac3fd1a34959879d7e59e63027286627f2"}, ] [package.dependencies] colorama = {version = "*", markers = "platform_system == \"Windows\""} [package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] +dev = ["nbval", "pytest (>=6)", "pytest-asyncio (>=0.24)", "pytest-cov", "pytest-timeout"] discord = ["requests"] notebook = ["ipywidgets (>=6)"] slack = ["slack-sdk"] @@ -6699,13 +6623,13 @@ typing-extensions = ">=3.7.4.3" [[package]] name = "types-openpyxl" -version = "3.1.5.20241114" +version = "3.1.5.20241126" description = "Typing stubs for openpyxl" optional = false python-versions = ">=3.8" files = [ - {file = "types-openpyxl-3.1.5.20241114.tar.gz", hash = "sha256:caeb9aafed8a5ffabdc74f880b148d90375364a1cfe7915d5065c5d79f3fe6a2"}, - {file = "types_openpyxl-3.1.5.20241114-py3-none-any.whl", hash = "sha256:f2925f595b08f5aef1baa725c9ee40baaf51beb05d98ac150593d3bdd37b1029"}, + {file = "types_openpyxl-3.1.5.20241126-py3-none-any.whl", hash = "sha256:e50ad5c2dec2c92cca521abed5c039975226e8e76389f17ab0ef813595593fbe"}, + {file = "types_openpyxl-3.1.5.20241126.tar.gz", hash = "sha256:f599afab19f87aa11672ee675346401d82a0dac71988df9a5411cdb1e7477377"}, ] [[package]] @@ -6861,13 +6785,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "virtualenv" -version = "20.27.1" +version = "20.28.0" description = "Virtual Python Environment builder" optional = false python-versions = ">=3.8" files = [ - {file = "virtualenv-20.27.1-py3-none-any.whl", hash = "sha256:f11f1b8a29525562925f745563bfd48b189450f61fb34c4f9cc79dd5aa32a1f4"}, - {file = "virtualenv-20.27.1.tar.gz", hash = "sha256:142c6be10212543b32c6c45d3d3893dff89112cc588b7d0879ae5a1ec03a47ba"}, + {file = "virtualenv-20.28.0-py3-none-any.whl", hash = "sha256:23eae1b4516ecd610481eda647f3a7c09aea295055337331bb4e6892ecce47b0"}, + {file = "virtualenv-20.28.0.tar.gz", hash = "sha256:2c9c3262bb8e7b87ea801d715fae4495e6032450c71d2309be9550e7364049aa"}, ] [package.dependencies] @@ -6945,13 +6869,13 @@ files = [ [[package]] name = "wheel" -version = "0.45.0" +version = "0.45.1" description = "A built-package format for Python" optional = false python-versions = ">=3.8" files = [ - {file = "wheel-0.45.0-py3-none-any.whl", hash = "sha256:52f0baa5e6522155090a09c6bd95718cc46956d1b51d537ea5454249edb671c7"}, - {file = "wheel-0.45.0.tar.gz", hash = "sha256:a57353941a3183b3d5365346b567a260a0602a0f8a635926a7dede41b94c674a"}, + {file = "wheel-0.45.1-py3-none-any.whl", hash = "sha256:708e7481cc80179af0e556bbf0cc00b8444c7321e2700b8d8580231d13017248"}, + {file = "wheel-0.45.1.tar.gz", hash = "sha256:661e1abd9198507b1409a20c02106d9670b2576e916d58f520316666abca6729"}, ] [package.extras] @@ -6970,81 +6894,76 @@ files = [ [[package]] name = "wrapt" -version = "1.16.0" +version = "1.17.0" description = "Module for decorators, wrappers and monkey patching." optional = false -python-versions = ">=3.6" +python-versions = ">=3.8" files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, + {file = "wrapt-1.17.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2a0c23b8319848426f305f9cb0c98a6e32ee68a36264f45948ccf8e7d2b941f8"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b1ca5f060e205f72bec57faae5bd817a1560fcfc4af03f414b08fa29106b7e2d"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e185ec6060e301a7e5f8461c86fb3640a7beb1a0f0208ffde7a65ec4074931df"}, + {file = "wrapt-1.17.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bb90765dd91aed05b53cd7a87bd7f5c188fcd95960914bae0d32c5e7f899719d"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:879591c2b5ab0a7184258274c42a126b74a2c3d5a329df16d69f9cee07bba6ea"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fce6fee67c318fdfb7f285c29a82d84782ae2579c0e1b385b7f36c6e8074fffb"}, + {file = "wrapt-1.17.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0698d3a86f68abc894d537887b9bbf84d29bcfbc759e23f4644be27acf6da301"}, + {file = "wrapt-1.17.0-cp310-cp310-win32.whl", hash = "sha256:69d093792dc34a9c4c8a70e4973a3361c7a7578e9cd86961b2bbf38ca71e4e22"}, + {file = "wrapt-1.17.0-cp310-cp310-win_amd64.whl", hash = "sha256:f28b29dc158ca5d6ac396c8e0a2ef45c4e97bb7e65522bfc04c989e6fe814575"}, + {file = "wrapt-1.17.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:74bf625b1b4caaa7bad51d9003f8b07a468a704e0644a700e936c357c17dd45a"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0f2a28eb35cf99d5f5bd12f5dd44a0f41d206db226535b37b0c60e9da162c3ed"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:81b1289e99cf4bad07c23393ab447e5e96db0ab50974a280f7954b071d41b489"}, + {file = "wrapt-1.17.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9f2939cd4a2a52ca32bc0b359015718472d7f6de870760342e7ba295be9ebaf9"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6a9653131bda68a1f029c52157fd81e11f07d485df55410401f745007bd6d339"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:4e4b4385363de9052dac1a67bfb535c376f3d19c238b5f36bddc95efae15e12d"}, + {file = "wrapt-1.17.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:bdf62d25234290db1837875d4dceb2151e4ea7f9fff2ed41c0fde23ed542eb5b"}, + {file = "wrapt-1.17.0-cp311-cp311-win32.whl", hash = "sha256:5d8fd17635b262448ab8f99230fe4dac991af1dabdbb92f7a70a6afac8a7e346"}, + {file = "wrapt-1.17.0-cp311-cp311-win_amd64.whl", hash = "sha256:92a3d214d5e53cb1db8b015f30d544bc9d3f7179a05feb8f16df713cecc2620a"}, + {file = "wrapt-1.17.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:89fc28495896097622c3fc238915c79365dd0ede02f9a82ce436b13bd0ab7569"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:875d240fdbdbe9e11f9831901fb8719da0bd4e6131f83aa9f69b96d18fae7504"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e5ed16d95fd142e9c72b6c10b06514ad30e846a0d0917ab406186541fe68b451"}, + {file = "wrapt-1.17.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18b956061b8db634120b58f668592a772e87e2e78bc1f6a906cfcaa0cc7991c1"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:daba396199399ccabafbfc509037ac635a6bc18510ad1add8fd16d4739cdd106"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:4d63f4d446e10ad19ed01188d6c1e1bb134cde8c18b0aa2acfd973d41fcc5ada"}, + {file = "wrapt-1.17.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8a5e7cc39a45fc430af1aefc4d77ee6bad72c5bcdb1322cfde852c15192b8bd4"}, + {file = "wrapt-1.17.0-cp312-cp312-win32.whl", hash = "sha256:0a0a1a1ec28b641f2a3a2c35cbe86c00051c04fffcfcc577ffcdd707df3f8635"}, + {file = "wrapt-1.17.0-cp312-cp312-win_amd64.whl", hash = "sha256:3c34f6896a01b84bab196f7119770fd8466c8ae3dfa73c59c0bb281e7b588ce7"}, + {file = "wrapt-1.17.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:714c12485aa52efbc0fc0ade1e9ab3a70343db82627f90f2ecbc898fdf0bb181"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da427d311782324a376cacb47c1a4adc43f99fd9d996ffc1b3e8529c4074d393"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ba1739fb38441a27a676f4de4123d3e858e494fac05868b7a281c0a383c098f4"}, + {file = "wrapt-1.17.0-cp313-cp313-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e711fc1acc7468463bc084d1b68561e40d1eaa135d8c509a65dd534403d83d7b"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:140ea00c87fafc42739bd74a94a5a9003f8e72c27c47cd4f61d8e05e6dec8721"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:73a96fd11d2b2e77d623a7f26e004cc31f131a365add1ce1ce9a19e55a1eef90"}, + {file = "wrapt-1.17.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0b48554952f0f387984da81ccfa73b62e52817a4386d070c75e4db7d43a28c4a"}, + {file = "wrapt-1.17.0-cp313-cp313-win32.whl", hash = "sha256:498fec8da10e3e62edd1e7368f4b24aa362ac0ad931e678332d1b209aec93045"}, + {file = "wrapt-1.17.0-cp313-cp313-win_amd64.whl", hash = "sha256:fd136bb85f4568fffca995bd3c8d52080b1e5b225dbf1c2b17b66b4c5fa02838"}, + {file = "wrapt-1.17.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:17fcf043d0b4724858f25b8826c36e08f9fb2e475410bece0ec44a22d533da9b"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e4a557d97f12813dc5e18dad9fa765ae44ddd56a672bb5de4825527c847d6379"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0229b247b0fc7dee0d36176cbb79dbaf2a9eb7ecc50ec3121f40ef443155fb1d"}, + {file = "wrapt-1.17.0-cp313-cp313t-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8425cfce27b8b20c9b89d77fb50e368d8306a90bf2b6eef2cdf5cd5083adf83f"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:9c900108df470060174108012de06d45f514aa4ec21a191e7ab42988ff42a86c"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:4e547b447073fc0dbfcbff15154c1be8823d10dab4ad401bdb1575e3fdedff1b"}, + {file = "wrapt-1.17.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:914f66f3b6fc7b915d46c1cc424bc2441841083de01b90f9e81109c9759e43ab"}, + {file = "wrapt-1.17.0-cp313-cp313t-win32.whl", hash = "sha256:a4192b45dff127c7d69b3bdfb4d3e47b64179a0b9900b6351859f3001397dabf"}, + {file = "wrapt-1.17.0-cp313-cp313t-win_amd64.whl", hash = "sha256:4f643df3d4419ea3f856c5c3f40fec1d65ea2e89ec812c83f7767c8730f9827a"}, + {file = "wrapt-1.17.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:69c40d4655e078ede067a7095544bcec5a963566e17503e75a3a3e0fe2803b13"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f495b6754358979379f84534f8dd7a43ff8cff2558dcdea4a148a6e713a758f"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:baa7ef4e0886a6f482e00d1d5bcd37c201b383f1d314643dfb0367169f94f04c"}, + {file = "wrapt-1.17.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8fc931382e56627ec4acb01e09ce66e5c03c384ca52606111cee50d931a342d"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:8f8909cdb9f1b237786c09a810e24ee5e15ef17019f7cecb207ce205b9b5fcce"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:ad47b095f0bdc5585bced35bd088cbfe4177236c7df9984b3cc46b391cc60627"}, + {file = "wrapt-1.17.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:948a9bd0fb2c5120457b07e59c8d7210cbc8703243225dbd78f4dfc13c8d2d1f"}, + {file = "wrapt-1.17.0-cp38-cp38-win32.whl", hash = "sha256:5ae271862b2142f4bc687bdbfcc942e2473a89999a54231aa1c2c676e28f29ea"}, + {file = "wrapt-1.17.0-cp38-cp38-win_amd64.whl", hash = "sha256:f335579a1b485c834849e9075191c9898e0731af45705c2ebf70e0cd5d58beed"}, + {file = "wrapt-1.17.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:d751300b94e35b6016d4b1e7d0e7bbc3b5e1751e2405ef908316c2a9024008a1"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7264cbb4a18dc4acfd73b63e4bcfec9c9802614572025bdd44d0721983fc1d9c"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:33539c6f5b96cf0b1105a0ff4cf5db9332e773bb521cc804a90e58dc49b10578"}, + {file = "wrapt-1.17.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c30970bdee1cad6a8da2044febd824ef6dc4cc0b19e39af3085c763fdec7de33"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:bc7f729a72b16ee21795a943f85c6244971724819819a41ddbaeb691b2dd85ad"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:6ff02a91c4fc9b6a94e1c9c20f62ea06a7e375f42fe57587f004d1078ac86ca9"}, + {file = "wrapt-1.17.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:2dfb7cff84e72e7bf975b06b4989477873dcf160b2fd89959c629535df53d4e0"}, + {file = "wrapt-1.17.0-cp39-cp39-win32.whl", hash = "sha256:2399408ac33ffd5b200480ee858baa58d77dd30e0dd0cab6a8a9547135f30a88"}, + {file = "wrapt-1.17.0-cp39-cp39-win_amd64.whl", hash = "sha256:4f763a29ee6a20c529496a20a7bcb16a73de27f5da6a843249c7047daf135977"}, + {file = "wrapt-1.17.0-py3-none-any.whl", hash = "sha256:d2c63b93548eda58abf5188e505ffed0229bf675f7c3090f8e36ad55b8cbc371"}, + {file = "wrapt-1.17.0.tar.gz", hash = "sha256:16187aa2317c731170a88ef35e8937ae0f533c402872c1ee5e6d079fcf320801"}, ] [[package]] @@ -7192,93 +7111,93 @@ files = [ [[package]] name = "yarl" -version = "1.17.2" +version = "1.18.0" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:93771146ef048b34201bfa382c2bf74c524980870bb278e6df515efaf93699ff"}, - {file = "yarl-1.17.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8281db240a1616af2f9c5f71d355057e73a1409c4648c8949901396dc0a3c151"}, - {file = "yarl-1.17.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:170ed4971bf9058582b01a8338605f4d8c849bd88834061e60e83b52d0c76870"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bc61b005f6521fcc00ca0d1243559a5850b9dd1e1fe07b891410ee8fe192d0c0"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:871e1b47eec7b6df76b23c642a81db5dd6536cbef26b7e80e7c56c2fd371382e"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3a58a2f2ca7aaf22b265388d40232f453f67a6def7355a840b98c2d547bd037f"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:736bb076f7299c5c55dfef3eb9e96071a795cb08052822c2bb349b06f4cb2e0a"}, - {file = "yarl-1.17.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8fd51299e21da709eabcd5b2dd60e39090804431292daacbee8d3dabe39a6bc0"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:358dc7ddf25e79e1cc8ee16d970c23faee84d532b873519c5036dbb858965795"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:50d866f7b1a3f16f98603e095f24c0eeba25eb508c85a2c5939c8b3870ba2df8"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:8b9c4643e7d843a0dca9cd9d610a0876e90a1b2cbc4c5ba7930a0d90baf6903f"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:d63123bfd0dce5f91101e77c8a5427c3872501acece8c90df457b486bc1acd47"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:4e76381be3d8ff96a4e6c77815653063e87555981329cf8f85e5be5abf449021"}, - {file = "yarl-1.17.2-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:734144cd2bd633a1516948e477ff6c835041c0536cef1d5b9a823ae29899665b"}, - {file = "yarl-1.17.2-cp310-cp310-win32.whl", hash = "sha256:26bfb6226e0c157af5da16d2d62258f1ac578d2899130a50433ffee4a5dfa673"}, - {file = "yarl-1.17.2-cp310-cp310-win_amd64.whl", hash = "sha256:76499469dcc24759399accd85ec27f237d52dec300daaca46a5352fcbebb1071"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:792155279dc093839e43f85ff7b9b6493a8eaa0af1f94f1f9c6e8f4de8c63500"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:38bc4ed5cae853409cb193c87c86cd0bc8d3a70fd2268a9807217b9176093ac6"}, - {file = "yarl-1.17.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:4a8c83f6fcdc327783bdc737e8e45b2e909b7bd108c4da1892d3bc59c04a6d84"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6d5fed96f0646bfdf698b0a1cebf32b8aae6892d1bec0c5d2d6e2df44e1e2d"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:782ca9c58f5c491c7afa55518542b2b005caedaf4685ec814fadfcee51f02493"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ff6af03cac0d1a4c3c19e5dcc4c05252411bf44ccaa2485e20d0a7c77892ab6e"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6a3f47930fbbed0f6377639503848134c4aa25426b08778d641491131351c2c8"}, - {file = "yarl-1.17.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d1fa68a3c921365c5745b4bd3af6221ae1f0ea1bf04b69e94eda60e57958907f"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:187df91395c11e9f9dc69b38d12406df85aa5865f1766a47907b1cc9855b6303"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:93d1c8cc5bf5df401015c5e2a3ce75a5254a9839e5039c881365d2a9dcfc6dc2"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:11d86c6145ac5c706c53d484784cf504d7d10fa407cb73b9d20f09ff986059ef"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c42774d1d1508ec48c3ed29e7b110e33f5e74a20957ea16197dbcce8be6b52ba"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0c8e589379ef0407b10bed16cc26e7392ef8f86961a706ade0a22309a45414d7"}, - {file = "yarl-1.17.2-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1056cadd5e850a1c026f28e0704ab0a94daaa8f887ece8dfed30f88befb87bb0"}, - {file = "yarl-1.17.2-cp311-cp311-win32.whl", hash = "sha256:be4c7b1c49d9917c6e95258d3d07f43cfba2c69a6929816e77daf322aaba6628"}, - {file = "yarl-1.17.2-cp311-cp311-win_amd64.whl", hash = "sha256:ac8eda86cc75859093e9ce390d423aba968f50cf0e481e6c7d7d63f90bae5c9c"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:dd90238d3a77a0e07d4d6ffdebc0c21a9787c5953a508a2231b5f191455f31e9"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:c74f0b0472ac40b04e6d28532f55cac8090e34c3e81f118d12843e6df14d0909"}, - {file = "yarl-1.17.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:4d486ddcaca8c68455aa01cf53d28d413fb41a35afc9f6594a730c9779545876"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f25b7e93f5414b9a983e1a6c1820142c13e1782cc9ed354c25e933aebe97fcf2"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3a0baff7827a632204060f48dca9e63fbd6a5a0b8790c1a2adfb25dc2c9c0d50"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:460024cacfc3246cc4d9f47a7fc860e4fcea7d1dc651e1256510d8c3c9c7cde0"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5870d620b23b956f72bafed6a0ba9a62edb5f2ef78a8849b7615bd9433384171"}, - {file = "yarl-1.17.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2941756754a10e799e5b87e2319bbec481ed0957421fba0e7b9fb1c11e40509f"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9611b83810a74a46be88847e0ea616794c406dbcb4e25405e52bff8f4bee2d0a"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:cd7e35818d2328b679a13268d9ea505c85cd773572ebb7a0da7ccbca77b6a52e"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:6b981316fcd940f085f646b822c2ff2b8b813cbd61281acad229ea3cbaabeb6b"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:688058e89f512fb7541cb85c2f149c292d3fa22f981d5a5453b40c5da49eb9e8"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:56afb44a12b0864d17b597210d63a5b88915d680f6484d8d202ed68ade38673d"}, - {file = "yarl-1.17.2-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:17931dfbb84ae18b287279c1f92b76a3abcd9a49cd69b92e946035cff06bcd20"}, - {file = "yarl-1.17.2-cp312-cp312-win32.whl", hash = "sha256:ff8d95e06546c3a8c188f68040e9d0360feb67ba8498baf018918f669f7bc39b"}, - {file = "yarl-1.17.2-cp312-cp312-win_amd64.whl", hash = "sha256:4c840cc11163d3c01a9d8aad227683c48cd3e5be5a785921bcc2a8b4b758c4f3"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:3294f787a437cb5d81846de3a6697f0c35ecff37a932d73b1fe62490bef69211"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f1e7fedb09c059efee2533119666ca7e1a2610072076926fa028c2ba5dfeb78c"}, - {file = "yarl-1.17.2-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da9d3061e61e5ae3f753654813bc1cd1c70e02fb72cf871bd6daf78443e9e2b1"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c012dceadc695ccf69301bfdccd1fc4472ad714fe2dd3c5ab4d2046afddf29"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f11fd61d72d93ac23718d393d2a64469af40be2116b24da0a4ca6922df26807e"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:46c465ad06971abcf46dd532f77560181387b4eea59084434bdff97524444032"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ef6eee1a61638d29cd7c85f7fd3ac7b22b4c0fabc8fd00a712b727a3e73b0685"}, - {file = "yarl-1.17.2-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4434b739a8a101a837caeaa0137e0e38cb4ea561f39cb8960f3b1e7f4967a3fc"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:752485cbbb50c1e20908450ff4f94217acba9358ebdce0d8106510859d6eb19a"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:17791acaa0c0f89323c57da7b9a79f2174e26d5debbc8c02d84ebd80c2b7bff8"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:5c6ea72fe619fee5e6b5d4040a451d45d8175f560b11b3d3e044cd24b2720526"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:db5ac3871ed76340210fe028f535392f097fb31b875354bcb69162bba2632ef4"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:7a1606ba68e311576bcb1672b2a1543417e7e0aa4c85e9e718ba6466952476c0"}, - {file = "yarl-1.17.2-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9bc27dd5cfdbe3dc7f381b05e6260ca6da41931a6e582267d5ca540270afeeb2"}, - {file = "yarl-1.17.2-cp313-cp313-win32.whl", hash = "sha256:52492b87d5877ec405542f43cd3da80bdcb2d0c2fbc73236526e5f2c28e6db28"}, - {file = "yarl-1.17.2-cp313-cp313-win_amd64.whl", hash = "sha256:8e1bf59e035534ba4077f5361d8d5d9194149f9ed4f823d1ee29ef3e8964ace3"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c556fbc6820b6e2cda1ca675c5fa5589cf188f8da6b33e9fc05b002e603e44fa"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:f2f44a4247461965fed18b2573f3a9eb5e2c3cad225201ee858726cde610daca"}, - {file = "yarl-1.17.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3a3ede8c248f36b60227eb777eac1dbc2f1022dc4d741b177c4379ca8e75571a"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2654caaf5584449d49c94a6b382b3cb4a246c090e72453493ea168b931206a4d"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0d41c684f286ce41fa05ab6af70f32d6da1b6f0457459a56cf9e393c1c0b2217"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2270d590997445a0dc29afa92e5534bfea76ba3aea026289e811bf9ed4b65a7f"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18662443c6c3707e2fc7fad184b4dc32dd428710bbe72e1bce7fe1988d4aa654"}, - {file = "yarl-1.17.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:75ac158560dec3ed72f6d604c81090ec44529cfb8169b05ae6fcb3e986b325d9"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:1fee66b32e79264f428dc8da18396ad59cc48eef3c9c13844adec890cd339db5"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:585ce7cd97be8f538345de47b279b879e091c8b86d9dbc6d98a96a7ad78876a3"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c019abc2eca67dfa4d8fb72ba924871d764ec3c92b86d5b53b405ad3d6aa56b0"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c6e659b9a24d145e271c2faf3fa6dd1fcb3e5d3f4e17273d9e0350b6ab0fe6e2"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:d17832ba39374134c10e82d137e372b5f7478c4cceeb19d02ae3e3d1daed8721"}, - {file = "yarl-1.17.2-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:bc3003710e335e3f842ae3fd78efa55f11a863a89a72e9a07da214db3bf7e1f8"}, - {file = "yarl-1.17.2-cp39-cp39-win32.whl", hash = "sha256:f5ffc6b7ace5b22d9e73b2a4c7305740a339fbd55301d52735f73e21d9eb3130"}, - {file = "yarl-1.17.2-cp39-cp39-win_amd64.whl", hash = "sha256:48e424347a45568413deec6f6ee2d720de2cc0385019bedf44cd93e8638aa0ed"}, - {file = "yarl-1.17.2-py3-none-any.whl", hash = "sha256:dd7abf4f717e33b7487121faf23560b3a50924f80e4bef62b22dab441ded8f3b"}, - {file = "yarl-1.17.2.tar.gz", hash = "sha256:753eaaa0c7195244c84b5cc159dc8204b7fd99f716f11198f999f2332a86b178"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a"}, + {file = "yarl-1.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038"}, + {file = "yarl-1.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed"}, + {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9"}, + {file = "yarl-1.18.0-cp310-cp310-win32.whl", hash = "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0"}, + {file = "yarl-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34"}, + {file = "yarl-1.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c"}, + {file = "yarl-1.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056"}, + {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc"}, + {file = "yarl-1.18.0-cp311-cp311-win32.whl", hash = "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716"}, + {file = "yarl-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6"}, + {file = "yarl-1.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e"}, + {file = "yarl-1.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa"}, + {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7"}, + {file = "yarl-1.18.0-cp312-cp312-win32.whl", hash = "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75"}, + {file = "yarl-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6"}, + {file = "yarl-1.18.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd"}, + {file = "yarl-1.18.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b"}, + {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af"}, + {file = "yarl-1.18.0-cp313-cp313-win32.whl", hash = "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88"}, + {file = "yarl-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4"}, + {file = "yarl-1.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422"}, + {file = "yarl-1.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c"}, + {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89"}, + {file = "yarl-1.18.0-cp39-cp39-win32.whl", hash = "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f"}, + {file = "yarl-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5"}, + {file = "yarl-1.18.0-py3-none-any.whl", hash = "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0"}, + {file = "yarl-1.18.0.tar.gz", hash = "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715"}, ] [package.dependencies] @@ -7312,4 +7231,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "d824c81c132de19beea5d5e395d70c1b9566bf5b938fec3d12ad478b953fd639" +content-hash = "0e1ba9bc3f10cdd3ddf161469701ca603279bad13505ff3b7b042826e2de4c35" diff --git a/pyproject.toml b/pyproject.toml index 7921904e..f387657a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [{include = "docling"}] ###################### python = "^3.9" pydantic = ">=2.0.0,<2.10" -docling-core = "^2.4.0" +docling-core = "^2.5.1" docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" diff --git a/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json b/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json index 5765cb25..c83414a2 100644 --- a/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json +++ b/tests/data/groundtruth/docling_v1/redp5110_sampled.pages.json @@ -1 +1 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] \ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/2203.01017v2.doctags.txt b/tests/data/groundtruth/docling_v2/2203.01017v2.doctags.txt index a0df3013..5e7b77a9 100644 --- a/tests/data/groundtruth/docling_v2/2203.01017v2.doctags.txt +++ b/tests/data/groundtruth/docling_v2/2203.01017v2.doctags.txt @@ -1,12 +1,11 @@ -TableFormer: Table Structure Understanding with Transformers. -Ahmed Nassar, Nikolaos Livathinos, Maksym Lysak, Peter Staar IBM Research +TableFormer: Table Structure Understanding with Transformers. +Ahmed Nassar, Nikolaos Livathinos, Maksym Lysak, Peter Staar IBM Research { ahn,nli,mly,taa } @zurich.ibm.com -Abstract -a. Picture of a table: -1. Introduction +Abstract +a. Picture of a table: +1. Introduction The occurrence of tables in documents is ubiquitous. They often summarise quantitative or factual data, which is cumbersome to describe in verbose text but nevertheless extremely valuable. Unfortunately, this compact representation is often not easy to parse by machines. There are many implicit conventions used to obtain a compact table representation. For example, tables often have complex columnand row-headers in order to reduce duplicated cell content. Lines of different shapes and sizes are leveraged to separate content or indicate a tree structure. Additionally, tables can also have empty/missing table-entries or multi-row textual table-entries. Fig. 1 shows a table which presents all these issues. -Tables organize valuable content in a concise and compact representation. This content is extremely valuable for systems such as search engines, Knowledge Graph's, etc, since they enhance their predictive capabilities. Unfortunately, tables come in a large variety of shapes and sizes. Furthermore, they can have complex column/row-header configurations, multiline rows, different variety of separation lines, missing entries, etc. As such, the correct identification of the table-structure from an image is a nontrivial task. In this paper, we present a new table-structure identification model. The latter improves the latest end-toend deep learning model (i.e. encoder-dual-decoder from PubTabNet) in two significant ways. First, we introduce a new object detection decoder for table-cells. In this way, we can obtain the content of the table-cells from programmatic PDF's directly from the PDF source and avoid the training of the custom OCR decoders. This architectural change leads to more accurate table-content extraction and allows us to tackle non-english tables. Second, we replace the LSTM decoders with transformer based decoders. This upgrade improves significantly the previous state-of-the-art tree-editing-distance-score (TEDS) from 91% to 98.5% on simple tables and from 88.7% to 95% on complex tables. @@ -18,7 +17,6 @@ c.Structure predicted by TableFormer: -
Tables organize valuable content in a concise and compact representation. This content is extremely valuable for systems such as search engines, Knowledge Graph's, etc, since they enhance their predictive capabilities. Unfortunately, tables come in a large variety of shapes and sizes. Furthermore, they can have complex column/row-header configurations, multiline rows, different variety of separation lines, missing entries, etc. As such, the correct identification of the table-structure from an image is a nontrivial task. In this paper, we present a new table-structure identification model. The latter improves the latest end-toend deep learning model (i.e. encoder-dual-decoder from PubTabNet) in two significant ways. First, we introduce a new object detection decoder for table-cells. In this way, we can obtain the content of the table-cells from programmatic PDF's directly from the PDF source and avoid the training of the custom OCR decoders. This architectural change leads to more accurate table-content extraction and allows us to tackle non-english tables. Second, we replace the LSTM decoders with transformer based decoders. This upgrade improves significantly the previous state-of-the-art tree-editing-distance-score (TEDS) from 91% to 98.5% on simple tables and from 88.7% to 95% on complex tables. Figure 1: Picture of a table with subtle, complex features such as (1) multi-column headers, (2) cell with multi-row text and (3) cells with no content. Image from PubTabNet evaluation set, filename: 'PMC2944238 004 02'.
@@ -34,13 +32,15 @@ The second problem is called table-structure decomposition. The latter is a long standing problem in the community of document understanding [6, 4, 14]. Contrary to the table-location problem, there are no commonly used approaches that can easily be re-purposed to solve this problem. Lately, a set of new model-architectures has been proposed by the community to address table-structure decomposition [37, 36, 18, 20]. All these models have some weaknesses (see Sec. 2). The common denominator here is the reliance on textual features and/or the inability to provide the bounding box of each table-cell in the original image.In this paper, we want to address these weaknesses and present a robust table-structure decomposition algorithm. The design criteria for our model are the following. First, we want our algorithm to be language agnostic. In this way, we can obtain the structure of any table, irregardless of the language. Second, we want our algorithm to leverage as much data as possible from the original PDF document. For programmatic PDF documents, the text-cells can often be extracted much faster and with higher accuracy compared to OCR methods. Last but not least, we want to have a direct link between the table-cell and its bounding box in the image.To meet the design criteria listed above, we developed a new model called TableFormer and a synthetically generated table structure dataset called SynthTabNet $^{1}$. In particular, our contributions in this work can be summarised as follows: + · We propose TableFormer , a transformer based model that predicts tables structure and bounding boxes for the table content simultaneously in an end-to-end approach. · Across all benchmark datasets TableFormer significantly outperforms existing state-of-the-art metrics, while being much more efficient in training and inference to existing works. · We present SynthTabNet a synthetically generated dataset, with various appearance styles and complexity. · An augmented dataset based on PubTabNet [37], FinTabNet [36], and TableBank [17] with generated ground-truth for reproducibility. +The paper is structured as follows. In Sec. 2, we give a brief overview of the current state-of-the-art. In Sec. 3, we describe the datasets on which we train. In Sec. 4, we introduce the TableFormer model-architecture and describeits results & performance in Sec. 5. As a conclusion, we describe how this new model-architecture can be re-purposed for other tasks in the computer-vision community. -2. Previous work and State of the Art +2. Previous work and State of the ArtIdentifying the structure of a table has been an outstanding problem in the document-parsing community, that motivates many organised public challenges [6, 4, 14]. The difficulty of the problem can be attributed to a number of factors. First, there is a large variety in the shapes and sizes of tables. Such large variety requires a flexible method. This is especially true for complex column- and row headers, which can be extremely intricate and demanding. A second factor of complexity is the lack of data with regard to table-structure. Until the publication of PubTabNet [37], there were no large datasets (i.e. > 100 K tables) that provided structure information. This happens primarily due to the fact that tables are notoriously time-consuming to annotate by hand. However, this has definitely changed in recent years with the deliverance of PubTabNet [37], FinTabNet [36], TableBank [17] etc.Before the rising popularity of deep neural networks, the community relied heavily on heuristic and/or statistical methods to do table structure identification [3, 7, 11, 5, 13, 28]. Although such methods work well on constrained tables [12], a more data-driven approach can be applied due to the advent of convolutional neural networks (CNNs) and the availability of large datasets. To the best-of-our knowledge, there are currently two different types of network architecture that are being pursued for state-of-the-art tablestructure identification.Image-to-Text networks : In this type of network, one predicts a sequence of tokens starting from an encoded image. Such sequences of tokens can be HTML table tags [37, 17] or LaTeX symbols[10]. The choice of symbols is ultimately not very important, since one can be transformed into the other. There are however subtle variations in the Image-to-Text networks. The easiest network architectures are "image-encoder → text-decoder" (IETD), similar to network architectures that try to provide captions to images [32]. In these IETD networks, one expects as output the LaTeX/HTML string of the entire table, i.e. the symbols necessary for creating the table with the content of the table. Another approach is the "image-encoder → dual decoder" (IEDD) networks. In these type of networks, one has two consecutive decoders with different purposes. The first decoder is the tag-decoder , i.e. it only produces the HTML/LaTeX tags which construct an empty table. The second content-decoder uses the encoding of the image in combination with the output encoding of each cell-tag (from the tag-decoder ) to generate the textual content of each table cell. The network architecture of IEDD is certainly more elaborate, but it has the advantage that one can pre-train the @@ -48,9 +48,8 @@ In practice, both network architectures (IETD and IEDD) require an implicit, custom trained object-characterrecognition (OCR) to obtain the content of the table-cells. In the case of IETD, this OCR engine is implicit in the decoder similar to [24]. For the IEDD, the OCR is solely embedded in the content-decoder. This reliance on a custom, implicit OCR decoder is of course problematic. OCR is a well known and extremely tough problem, that often needs custom training for each individual language. However, the limited availability for non-english content in the current datasets, makes it impractical to apply the IETD and IEDD methods on tables with other languages. Additionally, OCR can be completely omitted if the tables originate from programmatic PDF documents with known positions of each cell. The latter was the inspiration for the work of this paper.Graph Neural networks : Graph Neural networks (GNN's) take a radically different approach to tablestructure extraction. Note that one table cell can constitute out of multiple text-cells. To obtain the table-structure, one creates an initial graph, where each of the text-cells becomes a node in the graph similar to [33, 34, 2]. Each node is then associated with en embedding vector coming from the encoded image, its coordinates and the encoded text. Furthermore, nodes that represent adjacent text-cells are linked. Graph Convolutional Networks (GCN's) based methods take the image as an input, but also the position of the text-cells and their content [18]. The purpose of a GCN is to transform the input graph into a new graph, which replaces the old links with new ones. The new links then represent the table-structure. With this approach, one can avoid the need to build custom OCR decoders. However, the quality of the reconstructed structure is not comparable to the current state-of-the-art [18].Hybrid Deep Learning-Rule-Based approach : A popular current model for table-structure identification is the use of a hybrid Deep Learning-Rule-Based approach similar to [27, 29]. In this approach, one first detects the position of the table-cells with object detection (e.g. YoloVx or MaskRCNN), then classifies the table into different types (from its images) and finally uses different rule-sets to obtain its table-structure. Currently, this approach achieves stateof-the-art results, but is not an end-to-end deep-learning method. As such, new rules need to be written if different types of tables are encountered. -3. Datasets +3. DatasetsWe rely on large-scale datasets such as PubTabNet [37], FinTabNet [36], and TableBank [17] datasets to train and evaluate our models. These datasets span over various appearance styles and content. We also introduce our own synthetically generated SynthTabNet dataset to fix an im- -
@@ -63,7 +62,6 @@ As it is illustrated in Fig. 2, the table distributions from all datasets are skewed towards simpler structures with fewer number of rows/columns. Additionally, there is very limited variance in the table styles, which in case of PubTabNet and FinTabNet means one styling format for the majority of the tables. Similar limitations appear also in the type of table content, which in some cases (e.g. FinTabNet) is restricted to a certain domain. Ultimately, the lack of diversity in the training dataset damages the ability of the models to generalize well on unseen data.Motivated by those observations we aimed at generating a synthetic table dataset named SynthTabNet . This approach offers control over: 1) the size of the dataset, 2) the table structure, 3) the table style and 4) the type of content. The complexity of the table structure is described by the size of the table header and the table body, as well as the percentage of the table cells covered by row spans and column spans. A set of carefully designed styling templates provides the basis to build a wide range of table appearances. Lastly, the table content is generated out of a curated collection of text corpora. By controlling the size and scope of the synthetic datasets we are able to train and evaluate our models in a variety of different conditions. For example, we can first generate a highly diverse dataset to train our models and then evaluate their performance on other synthetic datasets which are focused on a specific domain.In this regard, we have prepared four synthetic datasets, each one containing 150k examples. The corpora to generate the table text consists of the most frequent terms appearing in PubTabNet and FinTabNet together with randomly generated text. The first two synthetic datasets have been fine-tuned to mimic the appearance of the original datasets but encompass more complicated table structures. The third -
Figure 1: Picture of a table with subtle, complex features such as (1) multi-column headers, (2) cell with multi-row text and (3) cells with no content. Image from PubTabNet evaluation set, filename: 'PMC2944238 004 02'. Figure 2: Distribution of the tables across different table dimensions in PubTabNet + FinTabNet datasets Figure 2: Distribution of the tables across different table dimensions in PubTabNet + FinTabNet datasets Table 1: Both "Combined-Tabnet" and "CombinedTabnet" are variations of the following: (*) The CombinedTabnet dataset is the processed combination of PubTabNet and Fintabnet. (**) The combined dataset is the processed combination of PubTabNet, Fintabnet and TableBank.
@@ -77,17 +75,15 @@
Table 1: Both "Combined-Tabnet" and "CombinedTabnet" are variations of the following: (*) The CombinedTabnet dataset is the processed combination of PubTabNet and Fintabnet. (**) The combined dataset is the processed combination of PubTabNet, Fintabnet and TableBank.
one adopts a colorful appearance with high contrast and the last one contains tables with sparse content. Lastly, we have combined all synthetic datasets into one big unified synthetic dataset of 600k examples. Tab. 1 summarizes the various attributes of the datasets. -4. The TableFormer model +4. The TableFormer model Given the image of a table, TableFormer is able to predict: 1) a sequence of tokens that represent the structure of a table, and 2) a bounding box coupled to a subset of those tokens. The conversion of an image into a sequence of tokens is a well-known task [35, 16]. While attention is often used as an implicit method to associate each token of the sequence with a position in the original image, an explicit association between the individual table-cells and the image bounding boxes is also required. -4.1. Model architecture. +4.1. Model architecture. We now describe in detail the proposed method, which is composed of three main components, see Fig. 4. Our CNN Backbone Network encodes the input as a feature vector of predefined length. The input feature vector of the encoded image is passed to the Structure Decoder to produce a sequence of HTML tags that represent the structure of the table. With each prediction of an HTML standard data cell (' < td > ') the hidden state of that cell is passed to the Cell BBox Decoder. As for spanning cells, such as row or column span, the tag is broken down to ' < ', 'rowspan=' or 'colspan=', with the number of spanning cells (attribute), and ' > '. The hidden state attached to ' < ' is passed to the Cell BBox Decoder. A shared feed forward network (FFN) receives the hidden states from the Structure Decoder, to provide the final detection predictions of the bounding box coordinates and their classification. CNN Backbone Network. A ResNet-18 CNN is the backbone that receives the table image and encodes it as a vector of predefined length. The network has been modified by removing the linear and pooling layer, as we are not per- -Figure 3: TableFormer takes in an image of the PDF and creates bounding box and HTML structure predictions that are synchronized. The bounding boxes grabs the content from the PDF and inserts it in the structure.

Figure 3: TableFormer takes in an image of the PDF and creates bounding box and HTML structure predictions that are synchronized. The bounding boxes grabs the content from the PDF and inserts it in the structure.
-Figure 4: Given an input image of a table, the Encoder produces fixed-length features that represent the input image. The features are then passed to both the Structure Decoder and Cell BBox Decoder . During training, the Structure Decoder receives 'tokenized tags' of the HTML code that represent the table structure. Afterwards, a transformer encoder and decoder architecture is employed to produce features that are received by a linear layer, and the Cell BBox Decoder. The linear layer is applied to the features to predict the tags. Simultaneously, the Cell BBox Decoder selects features referring to the data cells (' < td > ', ' < ') and passes them through an attention network, an MLP, and a linear layer to predict the bounding boxes.
Figure 4: Given an input image of a table, the Encoder produces fixed-length features that represent the input image. The features are then passed to both the Structure Decoder and Cell BBox Decoder . During training, the Structure Decoder receives 'tokenized tags' of the HTML code that represent the table structure. Afterwards, a transformer encoder and decoder architecture is employed to produce features that are received by a linear layer, and the Cell BBox Decoder. The linear layer is applied to the features to predict the tags. Simultaneously, the Cell BBox Decoder selects features referring to the data cells (' < td > ', ' < ') and passes them through an attention network, an MLP, and a linear layer to predict the bounding boxes. @@ -103,8 +99,8 @@ The loss used to train the TableFormer can be defined as following: l$_{box}$ = λ$_{iou}$l$_{iou}$ + λ$_{l}$$_{1}$ l = λl$_{s}$ + (1 - λ ) l$_{box}$ (1) where λ ∈ [0, 1], and λ$_{iou}$, λ$_{l}$$_{1}$ ∈$_{R}$ are hyper-parameters. -5. Experimental Results -5.1. Implementation Details +5. Experimental Results +5.1. Implementation Details TableFormer uses ResNet-18 as the CNN Backbone Network . The input images are resized to 448*448 pixels and the feature map has a dimension of 28*28. Additionally, we enforce the following input constraints: Image width and height ≤ 1024 pixels Structural tags length ≤ 512 tokens. (2) Although input constraints are used also by other methods, such as EDD, ours are less restrictive due to the improved @@ -112,16 +108,15 @@ The Transformer Encoder consists of two "Transformer Encoder Layers", with an input feature size of 512, feed forward network of 1024, and 4 attention heads. As for the Transformer Decoder it is composed of four "Transformer Decoder Layers" with similar input and output dimensions as the "Transformer Encoder Layers". Even though our model uses fewer layers and heads than the default implementation parameters, our extensive experimentation has proved this setup to be more suitable for table images. We attribute this finding to the inherent design of table images, which contain mostly lines and text, unlike the more elaborate content present in other scopes (e.g. the COCO dataset). Moreover, we have added ResNet blocks to the inputs of the Structure Decoder and Cell BBox Decoder. This prevents a decoder having a stronger influence over the learned weights which would damage the other prediction task (structure vs bounding boxes), but learn task specific weights instead. Lastly our dropout layers are set to 0.5. For training, TableFormer is trained with 3 Adam optimizers, each one for the CNN Backbone Network , Structure Decoder , and Cell BBox Decoder . Taking the PubTabNet as an example for our parameter set up, the initializing learning rate is 0.001 for 12 epochs with a batch size of 24, and λ set to 0.5. Afterwards, we reduce the learning rate to 0.0001, the batch size to 18 and train for 12 more epochs or convergence. TableFormer is implemented with PyTorch and Torchvision libraries [22]. To speed up the inference, the image undergoes a single forward pass through the CNN Backbone Network and transformer encoder. This eliminates the overhead of generating the same features for each decoding step. Similarly, we employ a 'caching' technique to preform faster autoregressive decoding. This is achieved by storing the features of decoded tokens so we can reuse them for each time step. Therefore, we only compute the attention for each new tag. -5.2. Generalization +5.2. Generalization TableFormer is evaluated on three major publicly available datasets of different nature to prove the generalization and effectiveness of our model. The datasets used for evaluation are the PubTabNet, FinTabNet and TableBank which stem from the scientific, financial and general domains respectively. We also share our baseline results on the challenging SynthTabNet dataset. Throughout our experiments, the same parameters stated in Sec. 5.1 are utilized. -5.3. Datasets and Metrics +5.3. Datasets and Metrics The Tree-Edit-Distance-Based Similarity (TEDS) metric was introduced in [37]. It represents the prediction, and ground-truth as a tree structure of HTML tags. This similarity is calculated as: TEDS ( T$_{a}$, T$_{b}$ ) = 1 - EditDist ( T$_{a}$, T$_{b}$ ) max ( | T$_{a}$ | , | T$_{b}$ | ) (3) where T$_{a}$ and T$_{b}$ represent tables in tree structure HTML format. EditDist denotes the tree-edit distance, and | T | represents the number of nodes in T . -5.4. Quantitative Analysis +5.4. Quantitative Analysis Structure. As shown in Tab. 2, TableFormer outperforms all SOTA methods across different datasets by a large margin for predicting the table structure from an image. All the more, our model outperforms pre-trained methods. During the evaluation we do not apply any table filtering. We also provide our baseline results on the SynthTabNet dataset. It has been observed that large tables (e.g. tables that occupy half of the page or more) yield poor predictions. We attribute this issue to the image resizing during the preprocessing step, that produces downsampled images with indistinguishable features. This problem can be addressed by treating such big tables with a separate model which accepts a large input image size. -Table 2: Structure results on PubTabNet (PTN), FinTabNet (FTN), TableBank (TB) and SynthTabNet (STN). @@ -140,7 +135,6 @@ FT: Model was trained on PubTabNet then finetuned.Cell Detection. Like any object detector, our Cell BBox Detector provides bounding boxes that can be improved with post-processing during inference. We make use of the grid-like structure of tables to refine the predictions. A detailed explanation on the post-processing is available in the supplementary material. As shown in Tab. 3, we evaluateour Cell BBox Decoder accuracy for cells with a class label of 'content' only using the PASCAL VOC mAP metric for pre-processing and post-processing. Note that we do not have post-processing results for SynthTabNet as images are only provided. To compare the performance of our proposed approach, we've integrated TableFormer's Cell BBox Decoder into EDD architecture. As mentioned previously, the Structure Decoder provides the Cell BBox Decoder with the features needed to predict the bounding box predictions. Therefore, the accuracy of the Structure Decoder directly influences the accuracy of the Cell BBox Decoder . If the Structure Decoder predicts an extra column, this will result in an extra column of predicted bounding boxes. -
Table 2: Structure results on PubTabNet (PTN), FinTabNet (FTN), TableBank (TB) and SynthTabNet (STN). Table 3: Cell Bounding Box detection results on PubTabNet, and FinTabNet. PP: Post-processing.
@@ -150,7 +144,6 @@ TableFormerSynthTabNet87.7-
Table 3: Cell Bounding Box detection results on PubTabNet, and FinTabNet. PP: Post-processing.
Cell Content. In this section, we evaluate the entire pipeline of recovering a table with content. Here we put our approach to test by capitalizing on extracting content from the PDF cells rather than decoding from images. Tab. 4 shows the TEDs score of HTML code representing the structure of the table along with the content inserted in the data cell and compared with the ground-truth. Our method achieved a 5.3% increase over the state-of-the-art, and commercial solutions. We believe our scores would be higher if the HTML ground-truth matched the extracted PDF cell content. Unfortunately, there are small discrepancies such as spacings around words or special characters with various unicode representations. -Table 4: Results of structure with content retrieved using cell detection on PubTabNet. In all cases the input is PDF documents with cropped tables. @@ -183,7 +176,6 @@ WWW から収集した論文1077334147969452946511122955
Table 4: Results of structure with content retrieved using cell detection on PubTabNet. In all cases the input is PDF documents with cropped tables.
-Text is aligned to match original for ease of viewing @@ -195,7 +187,6 @@ Canceled or forfeited(0. 1 )-102.0192.18Nonvested on December 311.00.3104.85 $$ 104.51
Text is aligned to match original for ease of viewing
-Figure 5: One of the benefits of TableFormer is that it is language agnostic, as an example, the left part of the illustration demonstrates TableFormer predictions on previously unseen language (Japanese). Additionally, we see that TableFormer is robust to variability in style and content, right side of the illustration shows the example of the TableFormer prediction from the FinTabNet dataset.
Figure 5: One of the benefits of TableFormer is that it is language agnostic, as an example, the left part of the illustration demonstrates TableFormer predictions on previously unseen language (Japanese). Additionally, we see that TableFormer is robust to variability in style and content, right side of the illustration shows the example of the TableFormer prediction from the FinTabNet dataset. @@ -203,20 +194,22 @@
-Figure 6: An example of TableFormer predictions (bounding boxes and structure) from generated SynthTabNet table.
Figure 6: An example of TableFormer predictions (bounding boxes and structure) from generated SynthTabNet table.
-5.5. Qualitative Analysis +5.5. Qualitative Analysis We showcase several visualizations for the different components of our network on various "complex" tables within datasets presented in this work in Fig. 5 and Fig. 6 As it is shown, our model is able to predict bounding boxes for all table cells, even for the empty ones. Additionally, our post-processing techniques can extract the cell content by matching the predicted bounding boxes to the PDF cells based on their overlap and spatial proximity. The left part of Fig. 5 demonstrates also the adaptability of our method to any language, as it can successfully extract Japanese text, although the training set contains only English content. We provide more visualizations including the intermediate steps in the supplementary material. Overall these illustrations justify the versatility of our method across a diverse range of table appearances and content type. -6. Future Work & Conclusion +6. Future Work & Conclusion In this paper, we presented TableFormer an end-to-end transformer based approach to predict table structures and bounding boxes of cells from an image. This approach enables us to recreate the table structure, and extract the cell content from PDF or OCR by using bounding boxes. Additionally, it provides the versatility required in real-world scenarios when dealing with various types of PDF documents, and languages. Furthermore, our method outperforms all state-of-the-arts with a wide margin. Finally, we introduce "SynthTabNet" a challenging synthetically generated dataset that reinforces missing characteristics from other datasets. -References +References + [1] Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. End-to- +
+ end object detection with transformers. In Andrea Vedaldi, Horst Bischof, Thomas Brox, and Jan-Michael Frahm, editors, Computer Vision - ECCV 2020 , pages 213-229, Cham, 2020. Springer International Publishing. 5 [2] Zewen Chi, Heyan Huang, Heng-Da Xu, Houjin Yu, Wanxuan Yin, and Xian-Ling Mao. Complicated table structure recognition. arXiv preprint arXiv:1908.04729 , 2019. 3 [3] Bertrand Couasnon and Aurelie Lemaitre. Recognition of Tables and Forms , pages 647-677. Springer London, London, 2014. 2 @@ -232,6 +225,8 @@ [13] Thotreingam Kasar, Philippine Barlas, Sebastien Adam, Cl'ement Chatelain, and Thierry Paquet. Learning to detect tables in scanned document images using line information. In 2013 12th International Conference on Document Analysis and Recognition , pages 1185-1189. IEEE, 2013. 2 [14] Pratik Kayal, Mrinal Anand, Harsh Desai, and Mayank Singh. Icdar 2021 competition on scientific table image recognition to latex, 2021. 2 [15] Harold W Kuhn. The hungarian method for the assignment problem. Naval research logistics quarterly , 2(1-2):83-97, 1955. 6 + + [16] Girish Kulkarni, Visruth Premraj, Vicente Ordonez, Sagnik Dhar, Siming Li, Yejin Choi, Alexander C. Berg, and Tamara L. Berg. Babytalk: Understanding and generating simple image descriptions. IEEE Transactions on Pattern Analysis and Machine Intelligence , 35(12):2891-2903, 2013. 4 [17] Minghao Li, Lei Cui, Shaohan Huang, Furu Wei, Ming Zhou, and Zhoujun Li. Tablebank: A benchmark dataset for table detection and recognition, 2019. 2, 3 [18] Yiren Li, Zheng Huang, Junchi Yan, Yi Zhou, Fan Ye, and Xianhui Liu. Gfte: Graph-based financial table extraction. In Alberto Del Bimbo, Rita Cucchiara, Stan Sclaroff, Giovanni Maria Farinella, Tao Mei, Marco Bertini, Hugo Jair Escalante, and Roberto Vezzani, editors, Pattern Recognition. ICPR International Workshops and Challenges , pages 644-658, Cham, 2021. Springer International Publishing. 2, 3 @@ -242,7 +237,9 @@ [23] Devashish Prasad, Ayan Gadpal, Kshitij Kapadni, Manish Visave, and Kavita Sultanpure. Cascadetabnet: An approach for end to end table detection and structure recognition from image-based documents. In Proceedings of the IEEE/CVF Conference on Computer Vision and Pattern Recognition Workshops , pages 572-573, 2020. 1 [24] Shah Rukh Qasim, Hassan Mahmood, and Faisal Shafait. Rethinking table recognition using graph neural networks. In 2019 International Conference on Document Analysis and Recognition (ICDAR) , pages 142-147. IEEE, 2019. 3 [25] Hamid Rezatofighi, Nathan Tsoi, JunYoung Gwak, Amir Sadeghian, Ian Reid, and Silvio Savarese. Generalized intersection over union: A metric and a loss for bounding box regression. In Proceedings of the IEEE/CVF Conference on + Computer Vision and Pattern Recognition , pages 658-666, 2019. 6 + [26] Sebastian Schreiber, Stefan Agne, Ivo Wolf, Andreas Dengel, and Sheraz Ahmed. Deepdesrt: Deep learning for detection and structure recognition of tables in document images. In 2017 14th IAPR International Conference on Document Analysis and Recognition (ICDAR) , volume 01, pages 11621167, 2017. 1 [27] Sebastian Schreiber, Stefan Agne, Ivo Wolf, Andreas Dengel, and Sheraz Ahmed. Deepdesrt: Deep learning for detection and structure recognition of tables in document images. In 2017 14th IAPR international conference on document analysis and recognition (ICDAR) , volume 1, pages 1162-1167. IEEE, 2017. 3 [28] Faisal Shafait and Ray Smith. Table detection in heterogeneous documents. In Proceedings of the 9th IAPR International Workshop on Document Analysis Systems , pages 6572, 2010. 2 @@ -255,77 +252,86 @@ [35] Quanzeng You, Hailin Jin, Zhaowen Wang, Chen Fang, and Jiebo Luo. Image captioning with semantic attention. In Proceedings of the IEEE conference on computer vision and pattern recognition , pages 4651-4659, 2016. 4 [36] Xinyi Zheng, Doug Burdick, Lucian Popa, Peter Zhong, and Nancy Xin Ru Wang. Global table extractor (gte): A framework for joint table identification and cell structure recognition using visual context. Winter Conference for Applications in Computer Vision (WACV) , 2021. 2, 3 [37] Xu Zhong, Elaheh ShafieiBavani, and Antonio Jimeno Yepes. Image-based table recognition: Data, model, + + and evaluation. In Andrea Vedaldi, Horst Bischof, Thomas Brox, and Jan-Michael Frahm, editors, Computer Vision ECCV 2020 , pages 564-580, Cham, 2020. Springer International Publishing. 2, 3, 7 [38] Xu Zhong, Jianbin Tang, and Antonio Jimeno Yepes. Publaynet: Largest dataset ever for document layout analysis. In 2019 International Conference on Document Analysis and Recognition (ICDAR) , pages 1015-1022, 2019. 1 -TableFormer: Table Structure Understanding with Transformers Supplementary Material -1. Details on the datasets -1.1. Data preparation + +TableFormer: Table Structure Understanding with Transformers Supplementary Material +1. Details on the datasets +1.1. Data preparation As a first step of our data preparation process, we have calculated statistics over the datasets across the following dimensions: (1) table size measured in the number of rows and columns, (2) complexity of the table, (3) strictness of the provided HTML structure and (4) completeness (i.e. no omitted bounding boxes). A table is considered to be simple if it does not contain row spans or column spans. Additionally, a table has a strict HTML structure if every row has the same number of columns after taking into account any row or column spans. Therefore a strict HTML structure looks always rectangular. However, HTML is a lenient encoding format, i.e. tables with rows of different sizes might still be regarded as correct due to implicit display rules. These implicit rules leave room for ambiguity, which we want to avoid. As such, we prefer to have "strict" tables, i.e. tables where every row has exactly the same length. We have developed a technique that tries to derive a missing bounding box out of its neighbors. As a first step, we use the annotation data to generate the most fine-grained grid that covers the table structure. In case of strict HTML tables, all grid squares are associated with some table cell and in the presence of table spans a cell extends across multiple grid squares. When enough bounding boxes are known for a rectangular table, it is possible to compute the geometrical border lines between the grid rows and columns. Eventually this information is used to generate the missing bounding boxes. Additionally, the existence of unused grid squares indicates that the table rows have unequal number of columns and the overall structure is non-strict. The generation of missing bounding boxes for non-strict HTML tables is ambiguous and therefore quite challenging. Thus, we have decided to simply discard those tables. In case of PubTabNet we have computed missing bounding boxes for 48% of the simple and 69% of the complex tables. Regarding FinTabNet, 68% of the simple and 98% of the complex tables require the generation of bounding boxes. Figure 7 illustrates the distribution of the tables across different dimensions per dataset. -1.2. Synthetic datasets +1.2. Synthetic datasets Aiming to train and evaluate our models in a broader spectrum of table data we have synthesized four types of datasets. Each one contains tables with different appear- ances in regard to their size, structure, style and content. Every synthetic dataset contains 150k examples, summing up to 600k synthetic examples. All datasets are divided into Train, Test and Val splits (80%, 10%, 10%). The process of generating a synthetic dataset can be decomposed into the following steps: + 1. Prepare styling and content templates: The styling templates have been manually designed and organized into groups of scope specific appearances (e.g. financial data, marketing data, etc.) Additionally, we have prepared curated collections of content templates by extracting the most frequently used terms out of non-synthetic datasets (e.g. PubTabNet, FinTabNet, etc.). 2. Generate table structures: The structure of each synthetic dataset assumes a horizontal table header which potentially spans over multiple rows and a table body that may contain a combination of row spans and column spans. However, spans are not allowed to cross the header - body boundary. The table structure is described by the parameters: Total number of table rows and columns, number of header rows, type of spans (header only spans, row only spans, column only spans, both row and column spans), maximum span size and the ratio of the table area covered by spans. 3. Generate content: Based on the dataset theme , a set of suitable content templates is chosen first. Then, this content can be combined with purely random text to produce the synthetic content. 4. Apply styling templates: Depending on the domain of the synthetic dataset, a set of styling templates is first manually selected. Then, a style is randomly selected to format the appearance of the synthesized table. 5. Render the complete tables: The synthetic table is finally rendered by a web browser engine to generate the bounding boxes for each table cell. A batching technique is utilized to optimize the runtime overhead of the rendering process. -2. Prediction post-processing for PDF documents + +2. Prediction post-processing for PDF documents Although TableFormer can predict the table structure and the bounding boxes for tables recognized inside PDF documents, this is not enough when a full reconstruction of the original table is required. This happens mainly due the following reasons: -Figure 7: Distribution of the tables across different dimensions per dataset. Simple vs complex tables per dataset and split, strict vs non strict html structures per dataset and table complexity, missing bboxes per dataset and table complexity.
Figure 7: Distribution of the tables across different dimensions per dataset. Simple vs complex tables per dataset and split, strict vs non strict html structures per dataset and table complexity, missing bboxes per dataset and table complexity.
+ · TableFormer output does not include the table cell content. · There are occasional inaccuracies in the predictions of the bounding boxes. + However, it is possible to mitigate those limitations by combining the TableFormer predictions with the information already present inside a programmatic PDF document. More specifically, PDF documents can be seen as a sequence of PDF cells where each cell is described by its content and bounding box. If we are able to associate the PDF cells with the predicted table cells, we can directly link the PDF cell content to the table cell structure and use the PDF bounding boxes to correct misalignments in the predicted table cell bounding boxes. Here is a step-by-step description of the prediction postprocessing: + 1. Get the minimal grid dimensions - number of rows and columns for the predicted table structure. This represents the most granular grid for the underlying table structure. 2. Generate pair-wise matches between the bounding boxes of the PDF cells and the predicted cells. The Intersection Over Union (IOU) metric is used to evaluate the quality of the matches. 3. Use a carefully selected IOU threshold to designate the matches as "good" ones and "bad" ones. 3.a. If all IOU scores in a column are below the threshold, discard all predictions (structure and bounding boxes) for that column. 4. Find the best-fitting content alignment for the predicted cells with good IOU per each column. The alignment of the column can be identified by the following formula: + alignment = arg min c { D$_{c}$ } D$_{c}$ = max { x$_{c}$ } - min { x$_{c}$ } (4) where c is one of { left, centroid, right } and x$_{c}$ is the xcoordinate for the corresponding point. + 5. Use the alignment computed in step 4, to compute the median x -coordinate for all table columns and the me- + dian cell size for all table cells. The usage of median during the computations, helps to eliminate outliers caused by occasional column spans which are usually wider than the normal. + 6. Snap all cells with bad IOU to their corresponding median x -coordinates and cell sizes. 7. Generate a new set of pair-wise matches between the corrected bounding boxes and PDF cells. This time use a modified version of the IOU metric, where the area of the intersection between the predicted and PDF cells is divided by the PDF cell area. In case there are multiple matches for the same PDF cell, the prediction with the higher score is preferred. This covers the cases where the PDF cells are smaller than the area of predicted or corrected prediction cells. 8. In some rare occasions, we have noticed that TableFormer can confuse a single column as two. When the postprocessing steps are applied, this results with two predicted columns pointing to the same PDF column. In such case we must de-duplicate the columns according to highest total column intersection score. 9. Pick up the remaining orphan cells. There could be cases, when after applying all the previous post-processing steps, some PDF cells could still remain without any match to predicted cells. However, it is still possible to deduce the correct matching for an orphan PDF cell by mapping its bounding box on the geometry of the grid. This mapping decides if the content of the orphan cell will be appended to an already matched table cell, or a new table cell should be created to match with the orphan. + 9a. Compute the top and bottom boundary of the horizontal band for each grid row (min/max y coordinates per row). + 9b. Intersect the orphan's bounding box with the row bands, and map the cell to the closest grid row. 9c. Compute the left and right boundary of the vertical band for each grid column (min/max x coordinates per column). 9d. Intersect the orphan's bounding box with the column bands, and map the cell to the closest grid column. 9e. If the table cell under the identified row and column is not empty, extend its content with the content of the or- + phan cell. 9f. Otherwise create a new structural cell and match it wit the orphan cell. Aditional images with examples of TableFormer predictions and post-processing can be found below. Figure 8: Example of a table with multi-line header. -Figure 9: Example of a table with big empty distance between cells.
Figure 9: Example of a table with big empty distance between cells.
-Figure 10: Example of a complex table with empty cells.
Figure 10: Example of a complex table with empty cells.
-Figure 14: Example with multi-line text.
Figure 14: Example with multi-line text.
-Figure 11: Simple table with different style and empty cells.
Figure 11: Simple table with different style and empty cells.
-Figure 12: Simple table predictions and post processing.
Figure 12: Simple table predictions and post processing. @@ -336,12 +342,10 @@
-Figure 13: Table predictions example on colorful table.
Figure 13: Table predictions example on colorful table.
-Figure 16: Example of how post-processing helps to restore mis-aligned bounding boxes prediction artifact.
Figure 16: Example of how post-processing helps to restore mis-aligned bounding boxes prediction artifact. @@ -349,12 +353,10 @@
-Figure 15: Example with triangular table.
Figure 15: Example with triangular table.
-Figure 17: Example of long table. End-to-end example from initial PDF cells to prediction of bounding boxes, post processing and prediction of structure.
Figure 17: Example of long table. End-to-end example from initial PDF cells to prediction of bounding boxes, post processing and prediction of structure. diff --git a/tests/data/groundtruth/docling_v2/2206.01062.doctags.txt b/tests/data/groundtruth/docling_v2/2206.01062.doctags.txt index 9280218b..285e4731 100644 --- a/tests/data/groundtruth/docling_v2/2206.01062.doctags.txt +++ b/tests/data/groundtruth/docling_v2/2206.01062.doctags.txt @@ -1,18 +1,17 @@ -DocLayNet: A Large Human-Annotated Dataset for Document-Layout Analysis +DocLayNet: A Large Human-Annotated Dataset for Document-Layout Analysis Birgit Pfitzmann IBM Research Rueschlikon, Switzerland bpf@zurich.ibm.com Christoph Auer IBM Research Rueschlikon, Switzerland cau@zurich.ibm.com Michele Dolfi IBM Research Rueschlikon, Switzerland dol@zurich.ibm.com Ahmed S. Nassar IBM Research Rueschlikon, Switzerland ahn@zurich.ibm.com Peter Staar IBM Research Rueschlikon, Switzerland taa@zurich.ibm.com -ABSTRACT +ABSTRACT Accurate document layout analysis is a key requirement for highquality PDF document conversion. With the recent availability of public, large ground-truth datasets such as PubLayNet and DocBank, deep-learning models have proven to be very effective at layout detection and segmentation. While these datasets are of adequate size to train such models, they severely lack in layout variability since they are sourced from scientific article repositories such as PubMed and arXiv only. Consequently, the accuracy of the layout segmentation drops significantly when these models are applied on more challenging and diverse layouts. In this paper, we present DocLayNet , a new, publicly available, document-layout annotation dataset in COCO format. It contains 80863 manually annotated pages from diverse data sources to represent a wide variability in layouts. For each PDF page, the layout annotations provide labelled bounding-boxes with a choice of 11 distinct classes. DocLayNet also provides a subset of double- and triple-annotated pages to determine the inter-annotator agreement. In multiple experiments, we provide baseline accuracy scores (in mAP) for a set of popular object detection models. We also demonstrate that these models fall approximately 10% behind the inter-annotator agreement. Furthermore, we provide evidence that DocLayNet is of sufficient size. Lastly, we compare models trained on PubLayNet, DocBank and DocLayNet, showing that layout predictions of the DocLayNettrained models are more robust and thus the preferred choice for general-purpose document-layout analysis. -CCS CONCEPTS +CCS CONCEPTS · Information systems → Document structure ; · Applied computing → Document analysis ; · Computing methodologies → Machine learning ; Computer vision ; Object detection ; Permission to make digital or hard copies of part or all of this work for personal or classroom use is granted without fee provided that copies are not made or distributed for profit or commercial advantage and that copies bear this notice and the full citation on the first page. Copyrights for third-party components of this work must be honored. For all other uses, contact the owner/author(s). KDD '22, August 14-18, 2022, Washington, DC, USA © 2022 Copyright held by the owner/author(s). ACM ISBN 978-1-4503-9385-0/22/08. https://doi.org/10.1145/3534678.3539043 13 USING THE VERTICAL TUBE MODELS AY11230/11234 1. The vertical tube can be used for instructional viewing or to photograph the image with a digital camera or a micro TV unit 2. Loosen the retention screw, then rotate the adjustment ring to change the length of the vertical tube. 3. Make sure that both the images in OPERATION ( cont. ) SELECTING OBJECTIVE MAGNIFICATION 1. There are two objectives. The lower magnification objective has a greater depth of field and view. 2. In order to observe the specimen easily use the lower magnification objective first. Then, by rotating the case, the magnification can be changed. CHANGING THE INTERPUPILLARY DISTANCE 1. The distance between the observer's pupils is the interpupillary distance. 2. To adjust the interpupillary distance rotate the prism caps until both eyes coincide with the image in the eyepiece. FOCUSING 1. Remove the lens protective cover. 2. Place the specimen on the working stage. 3. Focus the specimen with the left eye first while turning the focus knob until the image appears clear and sharp. 4. Rotate the right eyepiece ring until the images in each eyepiece coincide and are sharp and clear. CHANGING THE BULB 1. Disconnect the power cord. 2. When the bulb is cool, remove the oblique illuminator cap and remove the halogen bulb with cap. 3. Replace with a new halogen bulb. 4. Open the window in the base plate and replace the halogen lamp or fluorescent lamp of transmitted illuminator. FOCUSING 1. Turn the focusing knob away or toward you until a clear image is viewed. 2. If the image is unclear, adjust the height of the elevator up or down, then turn the focusing knob again. ZOOM MAGNIFICATION 1. Turn the zoom magnification knob to the desired magnification and field of view. 2. In most situations, it is recommended that you focus at the lowest magnification, then move to a higher magnification and re-focus as necessary. 3. If the image is not clear to both eyes at the same time, the diopter ring may need adjustment. DIOPTER RING ADJUSTMENT 1. To adjust the eyepiece for viewing with or without eyeglasses and for differences in acuity between the right and left eyes, follow the following steps: a. Observe an image through the left eyepiece and bring a specific point into focus using the focus knob. b. By turning the diopter ring adjustment for the left eyepiece, bring the same point into sharp focus. c.Then bring the same point into focus through the right eyepiece by turning the right diopter ring. d.With more than one viewer, each viewer should note their own diopter ring position for the left and right eyepieces, then before viewing set the diopter ring adjustments to that setting. CHANGING THE BULB 1. Disconnect the power cord from the electrical outlet. 2. When the bulb is cool, remove the oblique illuminator cap and remove the halogen bulb with cap. 3. Replace with a new halogen bulb. 4. Open the window in the base plate and replace the halogen lamp or fluorescent lamp of transmitted illuminator. Model AY11230 Model AY11234 -Figure 1: Four examples of complex page layouts across different document categories
Figure 1: Four examples of complex page layouts across different document categories @@ -28,29 +27,32 @@ $ S S O \ ( [ S D Q G H G & L U F O L Q J $ S S U R D F K 0 D Q H X Y H U L Q J $ L U V S D F H 5 D G L X V Table $ S S O \ 6 W D Q G D U G & L U F O L Q J $ S S U R D F K 0 D Q H X Y H U L Q J 5 D G L X V 7 D E O H AIRPORT SKETCH The airport sketch is a depiction of the airport with emphasis on runway pattern and related information, positioned in either the lower left or lower right corner of the chart to aid pilot recognition of the airport from the air and to provide some information to aid on ground navigation of the airport. The runways are drawn to scale and oriented to true north. Runway dimensions (length and width) are shown for all active runways. Runway(s) are depicted based on what type and construction of the runway. Hard Surface Other Than Hard Surface Metal Surface Closed Runway Under Construction Stopways, Taxiways, Parking Areas Displaced Threshold Closed Pavement Water Runway Taxiways and aprons are shaded grey. Other runway features that may be shown are runway numbers, runway dimensions, runway slope, arresting gear, and displaced threshold. 2 W K H U L Q I R U P D W L R Q F R Q F H U Q L Q J O L J K W L Q J ¿ Q D O D S S U R D F K E H D U L Q J V D L U S R U W E H D F R Q R E V W D F O H V F R Q W U R O W R Z H U 1 $ 9 $ , ' V K H O L -pads may also be shown. $ L U S R U W ( O H Y D W L R Q D Q G 7 R X F K G R Z Q = R Q H ( O H Y D W L R Q The airport elevation is shown enclosed within a box in the upper left corner of the sketch box and the touchdown zone elevation (TDZE) is shown in the upper right corner of the sketch box. The airport elevation is the highest point of an D L U S R U W ¶ V X V D E O H U X Q Z D \ V P H D V X U H G L Q I H H W I U R P P H D Q V H D O H Y H O 7 K H 7 ' = ( L V W K H K L J K H V W H O H Y D W L R Q L Q W K H ¿ U V W I H H W R I the landing surface. Circling only approaches will not show a TDZE. FAA Chart Users' Guide - Terminal Procedures Publication (TPP) - Terms 114 -KEYWORDS +KEYWORDS PDF document conversion, layout segmentation, object-detection, data set, Machine Learning -ACM Reference Format: +ACM Reference Format: Birgit Pfitzmann, Christoph Auer, Michele Dolfi, Ahmed S. Nassar, and Peter Staar. 2022. DocLayNet: A Large Human-Annotated Dataset for DocumentLayout Analysis. In Proceedings of the 28th ACM SIGKDD Conference on Knowledge Discovery and Data Mining (KDD '22), August 14-18, 2022, Washington, DC, USA. ACM, New York, NY, USA, 9 pages. https://doi.org/10.1145/ 3534678.3539043 -1 INTRODUCTION +1 INTRODUCTION Despite the substantial improvements achieved with machine-learning (ML) approaches and deep neural networks in recent years, document conversion remains a challenging problem, as demonstrated by the numerous public competitions held on this topic [1-4]. The challenge originates from the huge variability in PDF documents regarding layout, language and formats (scanned, programmatic or a combination of both). Engineering a single ML model that can be applied on all types of documents and provides high-quality layout segmentation remains to this day extremely challenging [5]. To highlight the variability in document layouts, we show a few example documents from the DocLayNet dataset in Figure 1. A key problem in the process of document conversion is to understand the structure of a single document page, i.e. which segments of text should be grouped together in a unit. To train models for this task, there are currently two large datasets available to the community, PubLayNet [6] and DocBank [7]. They were introduced in 2019 and 2020 respectively and significantly accelerated the implementation of layout detection and segmentation models due to their sizes of 300K and 500K ground-truth pages. These sizes were achieved by leveraging an automation approach. The benefit of automated ground-truth generation is obvious: one can generate large ground-truth datasets at virtually no cost. However, the automation introduces a constraint on the variability in the dataset, because corresponding structured source data must be available. PubLayNet and DocBank were both generated from scientific document repositories (PubMed and arXiv), which provide XML or L A T E X sources. Those scientific documents present a limited variability in their layouts, because they are typeset in uniform templates provided by the publishers. Obviously, documents such as technical manuals, annual company reports, legal text, government tenders, etc. have very different and partially unique layouts. As a consequence, the layout predictions obtained from models trained on PubLayNet or DocBank is very reasonable when applied on scientific documents. However, for more artistic or free-style layouts, we see sub-par prediction quality from these models, which we demonstrate in Section 5. In this paper, we present the DocLayNet dataset. It provides pageby-page layout annotation ground-truth using bounding-boxes for 11 distinct class labels on 80863 unique document pages, of which a fraction carry double- or triple-annotations. DocLayNet is similar in spirit to PubLayNet and DocBank and will likewise be made available to the public 1 in order to stimulate the document-layout analysis community. It distinguishes itself in the following aspects: + (1) Human Annotation : In contrast to PubLayNet and DocBank, we relied on human annotation instead of automation approaches to generate the data set. (2) Large Layout Variability : We include diverse and complex layouts from a large variety of public sources. (3) Detailed Label Set : We define 11 class labels to distinguish layout features in high detail. PubLayNet provides 5 labels; DocBank provides 13, although not a superset of ours. (4) Redundant Annotations : A fraction of the pages in the DocLayNet data set carry more than one human annotation. + This enables experimentation with annotation uncertainty and quality control analysis. + (5) Pre-defined Train-, Test- & Validation-set : Like DocBank, we provide fixed train-, test- & validation-sets to ensure proportional representation of the class-labels. Further, we prevent leakage of unique layouts across sets, which has a large effect on model accuracy scores. + All aspects outlined above are detailed in Section 3. In Section 4, we will elaborate on how we designed and executed this large-scale human annotation campaign. We will also share key insights and lessons learned that might prove helpful for other parties planning to set up annotation campaigns. In Section 5, we will present baseline accuracy numbers for a variety of object detection methods (Faster R-CNN, Mask R-CNN and YOLOv5) trained on DocLayNet. We further show how the model performance is impacted by varying the DocLayNet dataset size, reducing the label set and modifying the train/test-split. Last but not least, we compare the performance of models trained on PubLayNet, DocBank and DocLayNet and demonstrate that a model trained on DocLayNet provides overall more robust layout recovery. -2 RELATED WORK +2 RELATED WORK While early approaches in document-layout analysis used rulebased algorithms and heuristics [8], the problem is lately addressed with deep learning methods. The most common approach is to leverage object detection models [9-15]. In the last decade, the accuracy and speed of these models has increased dramatically. Furthermore, most state-of-the-art object detection methods can be trained and applied with very little work, thanks to a standardisation effort of the ground-truth data format [16] and common deep-learning frameworks [17]. Reference data sets such as PubLayNet [6] and DocBank provide their data in the commonly accepted COCO format [16]. Lately, new types of ML models for document-layout analysis have emerged in the community [18-21]. These models do not approach the problem of layout analysis purely based on an image representation of the page, as computer vision methods do. Instead, they combine the text tokens and image representation of a page in order to obtain a segmentation. While the reported accuracies appear to be promising, a broadly accepted data format which links geometric and textual features has yet to establish. -3 THE DOCLAYNET DATASET +3 THE DOCLAYNET DATASET DocLayNet contains 80863 PDF pages. Among these, 7059 carry two instances of human annotations, and 1591 carry three. This amounts to 91104 total annotation instances. The annotations provide layout information in the shape of labeled, rectangular boundingboxes. We define 11 distinct labels for layout features, namely Caption , Footnote , Formula , List-item , Page-footer , Page-header , Picture , Section-header , Table , Text , and Title . Our reasoning for picking this particular label set is detailed in Section 4. In addition to open intellectual property constraints for the source documents, we required that the documents in DocLayNet adhere to a few conditions. Firstly, we kept scanned documents -Figure 2: Distribution of DocLayNet pages across document categories.
Figure 2: Distribution of DocLayNet pages across document categories. @@ -62,9 +64,8 @@ Table 1 shows the overall frequency and distribution of the labels among the different sets. Importantly, we ensure that subsets are only split on full-document boundaries. This avoids that pages of the same document are spread over train, test and validation set, which can give an undesired evaluation advantage to models and lead to overestimation of their prediction accuracy. We will show the impact of this decision in Section 5. In order to accommodate the different types of models currently in use by the community, we provide DocLayNet in an augmented COCO format [16]. This entails the standard COCO ground-truth file (in JSON format) with the associated page images (in PNG format, 1025 × 1025 pixels). Furthermore, custom fields have been added to each COCO record to specify document category, original document filename and page number. In addition, we also provide the original PDF pages, as well as sidecar files containing parsed PDF text and text-cell coordinates (in JSON). All additional files are linked to the primary page images by their matching filenames. Despite being cost-intense and far less scalable than automation, human annotation has several benefits over automated groundtruth generation. The first and most obvious reason to leverage human annotations is the freedom to annotate any type of document without requiring a programmatic source. For most PDF documents, the original source document is not available. The latter is not a hard constraint with human annotation, but it is for automated methods. A second reason to use human annotations is that the latter usually provide a more natural interpretation of the page layout. The human-interpreted layout can significantly deviate from the programmatic layout used in typesetting. For example, "invisible" tables might be used solely for aligning text paragraphs on columns. Such typesetting tricks might be interpreted by automated methods incorrectly as an actual table, while the human annotation will interpret it correctly as Text or other styles. The same applies to multi-line text elements, when authors decided to space them as "invisible" list elements without bullet symbols. A third reason to gather ground-truth through human annotation is to estimate a "natural" upper bound on the segmentation accuracy. As we will show in Section 4, certain documents featuring complex layouts can have different but equally acceptable layout interpretations. This natural upper bound for segmentation accuracy can be found by annotating the same pages multiple times by different people and evaluating the inter-annotator agreement. Such a baseline consistency evaluation is very useful to define expectations for a good target accuracy in trained deep neural network models and avoid overfitting (see Table 1). On the flip side, achieving high annotation consistency proved to be a key challenge in human annotation, as we outline in Section 4. -4 ANNOTATION CAMPAIGN +4 ANNOTATION CAMPAIGN The annotation campaign was carried out in four phases. In phase one, we identified and prepared the data sources for annotation. In phase two, we determined the class labels and how annotations should be done on the documents in order to obtain maximum consistency. The latter was guided by a detailed requirement analysis and exhaustive experiments. In phase three, we trained the annotation staff and performed exams for quality assurance. In phase four, -Table 1: DocLayNet dataset overview. Along with the frequency of each class label, we present the relative occurrence (as % of row "Total") in the train, test and validation sets. The inter-annotator agreement is computed as the mAP@0.5-0.95 metric between pairwise annotations from the triple-annotated pages, from which we obtain accuracy ranges. @@ -83,7 +84,6 @@ Title50710.470.300.5060-7224-6350-6394-10082-9668-7924-56Total1107470941123998166653182-8371-7479-8189-9486-9171-7668-85
Table 1: DocLayNet dataset overview. Along with the frequency of each class label, we present the relative occurrence (as % of row "Total") in the train, test and validation sets. The inter-annotator agreement is computed as the mAP@0.5-0.95 metric between pairwise annotations from the triple-annotated pages, from which we obtain accuracy ranges.
-Figure 3: Corpus Conversion Service annotation user interface. The PDF page is shown in the background, with overlaid text-cells (in darker shades). The annotation boxes can be drawn by dragging a rectangle over each segment with the respective label from the palette on the right.
Figure 3: Corpus Conversion Service annotation user interface. The PDF page is shown in the background, with overlaid text-cells (in darker shades). The annotation boxes can be drawn by dragging a rectangle over each segment with the respective label from the palette on the right. @@ -96,22 +96,22 @@ the textual content of an element, which goes beyond visual layout recognition, in particular outside the Scientific Articles category. At first sight, the task of visual document-layout interpretation appears intuitive enough to obtain plausible annotations in most cases. However, during early trial-runs in the core team, we observed many cases in which annotators use different annotation styles, especially for documents with challenging layouts. For example, if a figure is presented with subfigures, one annotator might draw a single figure bounding-box, while another might annotate each subfigure separately. The same applies for lists, where one might annotate all list items in one block or each list item separately. In essence, we observed that challenging layouts would be annotated in different but plausible ways. To illustrate this, we show in Figure 4 multiple examples of plausible but inconsistent annotations on the same pages. Obviously, this inconsistency in annotations is not desirable for datasets which are intended to be used for model training. To minimise these inconsistencies, we created a detailed annotation guideline. While perfect consistency across 40 annotation staff members is clearly not possible to achieve, we saw a huge improvement in annotation consistency after the introduction of our annotation guideline. A few selected, non-trivial highlights of the guideline are: + (1) Every list-item is an individual object instance with class label List-item . This definition is different from PubLayNet and DocBank, where all list-items are grouped together into one List object. (2) A List-item is a paragraph with hanging indentation. Singleline elements can qualify as List-item if the neighbour elements expose hanging indentation. Bullet or enumeration symbols are not a requirement. (3) For every Caption , there must be exactly one corresponding Picture or Table . (4) Connected sub-pictures are grouped together in one Picture object. (5) Formula numbers are included in a Formula object. (6) Emphasised text (e.g. in italic or bold) at the beginning of a paragraph is not considered a Section-header , unless it appears exclusively on its own line. + The complete annotation guideline is over 100 pages long and a detailed description is obviously out of scope for this paper. Nevertheless, it will be made publicly available alongside with DocLayNet for future reference. Phase 3: Training. After a first trial with a small group of people, we realised that providing the annotation guideline and a set of random practice pages did not yield the desired quality level for layout annotation. Therefore we prepared a subset of pages with two different complexity levels, each with a practice and an exam part. 974 pages were reference-annotated by one proficient core team member. Annotation staff were then given the task to annotate the same subsets (blinded from the reference). By comparing the annotations of each staff member with the reference annotations, we could quantify how closely their annotations matched the reference. Only after passing two exam levels with high annotation quality, staff were admitted into the production phase. Practice iterations -Figure 4: Examples of plausible annotation alternatives for the same page. Criteria in our annotation guideline can resolve cases A to C, while the case D remains ambiguous.
Figure 4: Examples of plausible annotation alternatives for the same page. Criteria in our annotation guideline can resolve cases A to C, while the case D remains ambiguous.
were carried out over a timeframe of 12 weeks, after which 8 of the 40 initially allocated annotators did not pass the bar. Phase 4: Production annotation. The previously selected 80K pages were annotated with the defined 11 class labels by 32 annotators. This production phase took around three months to complete. All annotations were created online through CCS, which visualises the programmatic PDF text-cells as an overlay on the page. The page annotation are obtained by drawing rectangular bounding-boxes, as shown in Figure 3. With regard to the annotation practices, we implemented a few constraints and capabilities on the tooling level. First, we only allow non-overlapping, vertically oriented, rectangular boxes. For the large majority of documents, this constraint was sufficient and it speeds up the annotation considerably in comparison with arbitrary segmentation shapes. Second, annotator staff were not able to see each other's annotations. This was enforced by design to avoid any bias in the annotation, which could skew the numbers of the inter-annotator agreement (see Table 1). We wanted -Table 2: Prediction performance (mAP@0.5-0.95) of object detection networks on DocLayNet test set. The MRCNN (Mask R-CNN) and FRCNN (Faster R-CNN) models with ResNet-50 or ResNet-101 backbone were trained based on the network architectures from the detectron2 model zoo (Mask R-CNN R50, R101-FPN 3x, Faster R-CNN R101-FPN 3x), with default configurations. The YOLO implementation utilized was YOLOv5x6 [13]. All models were initialised using pre-trained weights from the COCO 2017 dataset. @@ -131,19 +131,17 @@ All82-8372.473.573.476.8
Table 2: Prediction performance (mAP@0.5-0.95) of object detection networks on DocLayNet test set. The MRCNN (Mask R-CNN) and FRCNN (Faster R-CNN) models with ResNet-50 or ResNet-101 backbone were trained based on the network architectures from the detectron2 model zoo (Mask R-CNN R50, R101-FPN 3x, Faster R-CNN R101-FPN 3x), with default configurations. The YOLO implementation utilized was YOLOv5x6 [13]. All models were initialised using pre-trained weights from the COCO 2017 dataset.
to avoid this at any cost in order to have clear, unbiased baseline numbers for human document-layout annotation. Third, we introduced the feature of snapping boxes around text segments to obtain a pixel-accurate annotation and again reduce time and effort. The CCS annotation tool automatically shrinks every user-drawn box to the minimum bounding-box around the enclosed text-cells for all purely text-based segments, which excludes only Table and Picture . For the latter, we instructed annotation staff to minimise inclusion of surrounding whitespace while including all graphical lines. A downside of snapping boxes to enclosed text cells is that some wrongly parsed PDF pages cannot be annotated correctly and need to be skipped. Fourth, we established a way to flag pages as rejected for cases where no valid annotation according to the label guidelines could be achieved. Example cases for this would be PDF pages that render incorrectly or contain layouts that are impossible to capture with non-overlapping rectangles. Such rejected pages are not contained in the final dataset. With all these measures in place, experienced annotation staff managed to annotate a single page in a typical timeframe of 20s to 60s, depending on its complexity. -5 EXPERIMENTS +5 EXPERIMENTS The primary goal of DocLayNet is to obtain high-quality ML models capable of accurate document-layout analysis on a wide variety of challenging layouts. As discussed in Section 2, object detection models are currently the easiest to use, due to the standardisation of ground-truth data in COCO format [16] and the availability of general frameworks such as detectron2 [17]. Furthermore, baseline numbers in PubLayNet and DocBank were obtained using standard object detection models such as Mask R-CNN and Faster R-CNN. As such, we will relate to these object detection methods in this -Figure 5: Prediction performance (mAP@0.5-0.95) of a Mask R-CNN network with ResNet50 backbone trained on increasing fractions of the DocLayNet dataset. The learning curve flattens around the 80% mark, indicating that increasing the size of the DocLayNet dataset with similar data will not yield significantly better predictions.
Figure 5: Prediction performance (mAP@0.5-0.95) of a Mask R-CNN network with ResNet50 backbone trained on increasing fractions of the DocLayNet dataset. The learning curve flattens around the 80% mark, indicating that increasing the size of the DocLayNet dataset with similar data will not yield significantly better predictions.
paper and leave the detailed evaluation of more recent methods mentioned in Section 2 for future work. In this section, we will present several aspects related to the performance of object detection models on DocLayNet. Similarly as in PubLayNet, we will evaluate the quality of their predictions using mean average precision (mAP) with 10 overlaps that range from 0.5 to 0.95 in steps of 0.05 (mAP@0.5-0.95). These scores are computed by leveraging the evaluation code provided by the COCO API [16]. -Baselines for Object Detection +Baselines for Object Detection In Table 2, we present baseline experiments (given in mAP) on Mask R-CNN [12], Faster R-CNN [11], and YOLOv5 [13]. Both training and evaluation were performed on RGB images with dimensions of 1025 × 1025 pixels. For training, we only used one annotation in case of redundantly annotated pages. As one can observe, the variation in mAP between the models is rather low, but overall between 6 and 10% lower than the mAP computed from the pairwise human annotations on triple-annotated pages. This gives a good indication that the DocLayNet dataset poses a worthwhile challenge for the research community to close the gap between human recognition and ML approaches. It is interesting to see that Mask R-CNN and Faster R-CNN produce very comparable mAP scores, indicating that pixel-based image segmentation derived from bounding-boxes does not help to obtain better predictions. On the other hand, the more recent Yolov5x model does very well and even out-performs humans on selected labels such as Text , Table and Picture . This is not entirely surprising, as Text , Table and Picture are abundant and the most visually distinctive in a document. Table 3: Performance of a Mask R-CNN R50 network in mAP@0.5-0.95 scores trained on DocLayNet with different class label sets. The reduced label sets were obtained by either down-mapping or dropping labels. -Table 4: Performance of a Mask R-CNN R50 network with document-wise and page-wise split for different label sets. Naive page-wise split will result in GLYPH 10% point improvement. @@ -161,9 +159,9 @@ Title77Sec.-h.Sec.-h.Sec.-h.Overall72737877
Table 4: Performance of a Mask R-CNN R50 network with document-wise and page-wise split for different label sets. Naive page-wise split will result in GLYPH 10% point improvement.
-Learning Curve +Learning Curve One of the fundamental questions related to any dataset is if it is "large enough". To answer this question for DocLayNet, we performed a data ablation study in which we evaluated a Mask R-CNN model trained on increasing fractions of the DocLayNet dataset. As can be seen in Figure 5, the mAP score rises sharply in the beginning and eventually levels out. To estimate the error-bar on the metrics, we ran the training five times on the entire data-set. This resulted in a 1% error-bar, depicted by the shaded area in Figure 5. In the inset of Figure 5, we show the exact same data-points, but with a logarithmic scale on the x-axis. As is expected, the mAP score increases linearly as a function of the data-size in the inset. The curve ultimately flattens out between the 80% and 100% mark, with the 80% mark falling within the error-bars of the 100% mark. This provides a good indication that the model would not improve significantly by yet increasing the data size. Rather, it would probably benefit more from improved data consistency (as discussed in Section 3), data augmentation methods [23], or the addition of more document categories and styles. -Impact of Class Labels +Impact of Class Labels The choice and number of labels can have a significant effect on the overall model performance. Since PubLayNet, DocBank and DocLayNet all have different label sets, it is of particular interest to understand and quantify this influence of the label set on the model performance. We investigate this by either down-mapping labels into more common ones (e.g. Caption → Text ) or excluding them from the annotations entirely. Furthermore, it must be stressed that all mappings and exclusions were performed on the data before model training. In Table 3, we present the mAP scores for a Mask R-CNN R50 network on different label sets. Where a label is down-mapped, we show its corresponding label, otherwise it was excluded. We present three different label sets, with 6, 5 and 4 different labels respectively. The set of 5 labels contains the same labels as PubLayNet. However, due to the different definition of @@ -183,11 +181,10 @@ All72847887
lists in PubLayNet (grouped list-items) versus DocLayNet (separate list-items), the label set of size 4 is the closest to PubLayNet, in the assumption that the List is down-mapped to Text in PubLayNet. The results in Table 3 show that the prediction accuracy on the remaining class labels does not change significantly when other classes are merged into them. The overall macro-average improves by around 5%, in particular when Page-footer and Page-header are excluded. -Impact of Document Split in Train and Test Set +Impact of Document Split in Train and Test Set Many documents in DocLayNet have a unique styling. In order to avoid overfitting on a particular style, we have split the train-, test- and validation-sets of DocLayNet on document boundaries, i.e. every document contributes pages to only one set. To the best of our knowledge, this was not considered in PubLayNet or DocBank. To quantify how this affects model performance, we trained and evaluated a Mask R-CNN R50 model on a modified dataset version. Here, the train-, test- and validation-sets were obtained by a randomised draw over the individual pages. As can be seen in Table 4, the difference in model performance is surprisingly large: pagewise splitting gains ˜ 10% in mAP over the document-wise splitting. Thus, random page-wise splitting of DocLayNet can easily lead to accidental overestimation of model performance and should be avoided. -Dataset Comparison +Dataset Comparison Throughout this paper, we claim that DocLayNet's wider variety of document layouts leads to more robust layout detection models. In Table 5, we provide evidence for that. We trained models on each of the available datasets (PubLayNet, DocBank and DocLayNet) and evaluated them on the test sets of the other datasets. Due to the different label sets and annotation styles, a direct comparison is not possible. Hence, we focussed on the common labels among the datasets. Between PubLayNet and DocLayNet, these are Picture , -Table 5: Prediction Performance (mAP@0.5-0.95) of a Mask R-CNN R50 network across the PubLayNet, DocBank & DocLayNet data-sets. By evaluating on common label classes of each dataset, we observe that the DocLayNet-trained model has much less pronounced variations in performance across all datasets. @@ -209,13 +206,14 @@
Table 5: Prediction Performance (mAP@0.5-0.95) of a Mask R-CNN R50 network across the PubLayNet, DocBank & DocLayNet data-sets. By evaluating on common label classes of each dataset, we observe that the DocLayNet-trained model has much less pronounced variations in performance across all datasets.
Section-header , Table and Text . Before training, we either mapped or excluded DocLayNet's other labels as specified in table 3, and also PubLayNet's List to Text . Note that the different clustering of lists (by list-element vs. whole list objects) naturally decreases the mAP score for Text . For comparison of DocBank with DocLayNet, we trained only on Picture and Table clusters of each dataset. We had to exclude Text because successive paragraphs are often grouped together into a single object in DocBank. This paragraph grouping is incompatible with the individual paragraphs of DocLayNet. As can be seen in Table 5, DocLayNet trained models yield better performance compared to the previous datasets. It is noteworthy that the models trained on PubLayNet and DocBank perform very well on their own test set, but have a much lower performance on the foreign datasets. While this also applies to DocLayNet, the difference is far less pronounced. Thus we conclude that DocLayNet trained models are overall more robust and will produce better results for challenging, unseen layouts. -Example Predictions +Example Predictions To conclude this section, we illustrate the quality of layout predictions one can expect from DocLayNet-trained models by providing a selection of examples without any further post-processing applied. Figure 6 shows selected layout predictions on pages from the test-set of DocLayNet. Results look decent in general across document categories, however one can also observe mistakes such as overlapping clusters of different classes, or entirely missing boxes due to low confidence. -6 CONCLUSION +6 CONCLUSION In this paper, we presented the DocLayNet dataset. It provides the document conversion and layout analysis research community a new and challenging dataset to improve and fine-tune novel ML methods on. In contrast to many other datasets, DocLayNet was created by human annotation in order to obtain reliable layout ground-truth on a wide variety of publication- and typesettingstyles. Including a large proportion of documents outside the scientific publishing domain adds significant value in this respect. From the dataset, we have derived on the one hand reference metrics for human performance on document-layout annotation (through double and triple annotations) and on the other hand evaluated the baseline performance of commonly used object detection methods. We also illustrated the impact of various dataset-related aspects on model performance through data-ablation experiments, both from a size and class-label perspective. Last but not least, we compared the accuracy of models trained on other public datasets and showed that DocLayNet trained models are more robust. To date, there is still a significant gap between human and ML accuracy on the layout interpretation task, and we hope that this work will inspire the research community to close that gap. -REFERENCES +REFERENCES + [1] Max Göbel, Tamir Hassan, Ermelinda Oro, and Giorgio Orsi. Icdar 2013 table competition. In 2013 12th International Conference on Document Analysis and Recognition , pages 1449-1453, 2013. [2] Christian Clausner, Apostolos Antonacopoulos, and Stefan Pletschacher. Icdar2017 competition on recognition of documents with complex layouts rdcl2017. In 2017 14th IAPR International Conference on Document Analysis and Recognition (ICDAR) , volume 01, pages 1404-1410, 2017. [3] Hervé Déjean, Jean-Luc Meunier, Liangcai Gao, Yilun Huang, Yu Fang, Florian Kleber, and Eva-Maria Lang. ICDAR 2019 Competition on Table Detection and Recognition (cTDaR), April 2019. http://sac.founderit.com/. @@ -229,13 +227,14 @@ [11] Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun. Faster r-cnn: Towards real-time object detection with region proposal networks. IEEE Transactions on Pattern Analysis and Machine Intelligence , 39(6):1137-1149, 2017. [12] Kaiming He, Georgia Gkioxari, Piotr Dollár, and Ross B. Girshick. Mask R-CNN. In IEEE International Conference on Computer Vision , ICCV, pages 2980-2988. IEEE Computer Society, Oct 2017. [13] Glenn Jocher, Alex Stoken, Ayush Chaurasia, Jirka Borovec, NanoCode012, TaoXie, Yonghye Kwon, Kalen Michael, Liu Changyu, Jiacong Fang, Abhiram V, Laughing, tkianai, yxNONG, Piotr Skalski, Adam Hogan, Jebastin Nadar, imyhxy, Lorenzo Mammana, Alex Wang, Cristi Fati, Diego Montes, Jan Hajek, Laurentiu -Text Caption List-Item Formula Table Section-Header Picture Page-Header Page-Footer Title +
Text Caption List-Item Formula Table Section-Header Picture Page-Header Page-Footer Title
Figure 6: Example layout predictions on selected pages from the DocLayNet test-set. (A, D) exhibit favourable results on coloured backgrounds. (B, C) show accurate list-item and paragraph differentiation despite densely-spaced lines. (E) demonstrates good table and figure distinction. (F) shows predictions on a Chinese patent with multiple overlaps, label confusion and missing boxes. Diaconu, Mai Thanh Minh, Marc, albinxavi, fatih, oleg, and wanghao yang. ultralytics/yolov5: v6.0 - yolov5n nano models, roboflow integration, tensorflow export, opencv dnn support, October 2021. + [14] Nicolas Carion, Francisco Massa, Gabriel Synnaeve, Nicolas Usunier, Alexander Kirillov, and Sergey Zagoruyko. End-to-end object detection with transformers. CoRR , abs/2005.12872, 2020. [15] Mingxing Tan, Ruoming Pang, and Quoc V. Le. Efficientdet: Scalable and efficient object detection. CoRR , abs/1911.09070, 2019. [16] Tsung-Yi Lin, Michael Maire, Serge J. Belongie, Lubomir D. Bourdev, Ross B. Girshick, James Hays, Pietro Perona, Deva Ramanan, Piotr Dollár, and C. Lawrence Zitnick. Microsoft COCO: common objects in context, 2014. diff --git a/tests/data/groundtruth/docling_v2/2305.03393v1-pg9.doctags.txt b/tests/data/groundtruth/docling_v2/2305.03393v1-pg9.doctags.txt index d4a43602..9352bf30 100644 --- a/tests/data/groundtruth/docling_v2/2305.03393v1-pg9.doctags.txt +++ b/tests/data/groundtruth/docling_v2/2305.03393v1-pg9.doctags.txt @@ -1,8 +1,7 @@ order to compute the TED score. Inference timing results for all experiments were obtained from the same machine on a single core with AMD EPYC 7763 CPU @2.45 GHz. -5.1 Hyper Parameter Optimization +5.1 Hyper Parameter Optimization We have chosen the PubTabNet data set to perform HPO, since it includes a highly diverse set of tables. Also we report TED scores separately for simple and complex tables (tables with cell spans). Results are presented in Table. 1. It is evident that with OTSL, our model achieves the same TED score and slightly better mAP scores in comparison to HTML. However OTSL yields a 2x speed up in the inference runtime over HTML. -Table 1. HPO performed in OTSL and HTML representation on the same transformer-based TableFormer [9] architecture, trained only on PubTabNet [22]. Effects of reducing the # of layers in encoder and decoder stages of the model show that smaller models trained on OTSL perform better, especially in recognizing complex table structures, and maintain a much higher mAP score than the HTML counterpart. @@ -14,7 +13,7 @@ 24HTML0.9450.897 0.9010.915 0.9310.859 0.8341.91 3.8142OTSL HTML0.952 0.9440.92 0.9030.942 0.9310.857 0.8241.22 2
Table 1. HPO performed in OTSL and HTML representation on the same transformer-based TableFormer [9] architecture, trained only on PubTabNet [22]. Effects of reducing the # of layers in encoder and decoder stages of the model show that smaller models trained on OTSL perform better, especially in recognizing complex table structures, and maintain a much higher mAP score than the HTML counterpart.
-5.2 Quantitative Results +5.2 Quantitative Results We picked the model parameter configuration that produced the best prediction quality (enc=6, dec=6, heads=8) with PubTabNet alone, then independently trained and evaluated it on three publicly available data sets: PubTabNet (395k samples), FinTabNet (113k samples) and PubTables-1M (about 1M samples). Performance results are presented in Table. 2. It is clearly evident that the model trained on OTSL outperforms HTML across the board, keeping high TEDs and mAP scores even on difficult financial tables (FinTabNet) that contain sparse and large tables. Additionally, the results show that OTSL has an advantage over HTML when applied on a bigger data set like PubTables-1M and achieves significantly improved scores. Finally, OTSL achieves faster inference due to fewer decoding steps which is a result of the reduced sequence representation.
\ No newline at end of file diff --git a/tests/data/groundtruth/docling_v2/2305.03393v1.doctags.txt b/tests/data/groundtruth/docling_v2/2305.03393v1.doctags.txt index 1a76182f..f1d5c26f 100644 --- a/tests/data/groundtruth/docling_v2/2305.03393v1.doctags.txt +++ b/tests/data/groundtruth/docling_v2/2305.03393v1.doctags.txt @@ -1,13 +1,12 @@ -Optimized Table Tokenization for Table Structure Recognition +Optimized Table Tokenization for Table Structure Recognition Maksym Lysak [0000 - 0002 - 3723 - $^{6960]}$, Ahmed Nassar[0000 - 0002 - 9468 - $^{0822]}$, Nikolaos Livathinos [0000 - 0001 - 8513 - $^{3491]}$, Christoph Auer[0000 - 0001 - 5761 - $^{0422]}$, and Peter Staar [0000 - 0002 - 8088 - 0823] IBM Research {mly,ahn,nli,cau,taa}@zurich.ibm.com Abstract. Extracting tables from documents is a crucial task in any document conversion pipeline. Recently, transformer-based models have demonstrated that table-structure can be recognized with impressive accuracy using Image-to-Markup-Sequence (Im2Seq) approaches. Taking only the image of a table, such models predict a sequence of tokens (e.g. in HTML, LaTeX) which represent the structure of the table. Since the token representation of the table structure has a significant impact on the accuracy and run-time performance of any Im2Seq model, we investigate in this paper how table-structure representation can be optimised. We propose a new, optimised table-structure language (OTSL) with a minimized vocabulary and specific rules. The benefits of OTSL are that it reduces the number of tokens to 5 (HTML needs 28+) and shortens the sequence length to half of HTML on average. Consequently, model accuracy improves significantly, inference time is halved compared to HTML-based models, and the predicted table structures are always syntactically correct. This in turn eliminates most post-processing needs. Popular table structure data-sets will be published in OTSL format to the community. Keywords: Table Structure Recognition · Data Representation · Transformers · Optimization. -1 Introduction +1 Introduction Tables are ubiquitous in documents such as scientific papers, patents, reports, manuals, specification sheets or marketing material. They often encode highly valuable information and therefore need to be extracted with high accuracy. Unfortunately, tables appear in documents in various sizes, styling and structure, making it difficult to recover their correct structure with simple analytical methods. Therefore, accurate table extraction is achieved these days with machine-learning based methods. In modern document understanding systems [1,15], table extraction is typically a two-step process. Firstly, every table on a page is located with a bounding box, and secondly, their logical row and column structure is recognized. As of -Fig. 1. Comparison between HTML and OTSL table structure representation: (A) table-example with complex row and column headers, including a 2D empty span, (B) minimal graphical representation of table structure using rectangular layout, (C) HTML representation, (D) OTSL representation. This example demonstrates many of the key-features of OTSL, namely its reduced vocabulary size (12 versus 5 in this case), its reduced sequence length (55 versus 30) and a enhanced internal structure (variable token sequence length per row in HTML versus a fixed length of rows in OTSL).
Fig. 1. Comparison between HTML and OTSL table structure representation: (A) table-example with complex row and column headers, including a 2D empty span, (B) minimal graphical representation of table structure using rectangular layout, (C) HTML representation, (D) OTSL representation. This example demonstrates many of the key-features of OTSL, namely its reduced vocabulary size (12 versus 5 in this case), its reduced sequence length (55 versus 30) and a enhanced internal structure (variable token sequence length per row in HTML versus a fixed length of rows in OTSL). @@ -17,15 +16,14 @@ While the majority of research in TSR is currently focused on the development and application of novel neural model architectures, the table structure representation language (e.g. HTML in PubTabNet and FinTabNet) is usually adopted as is for the sequence tokenization in Im2Seq models. In this paper, we aim for the opposite and investigate the impact of the table structure representation language with an otherwise unmodified Im2Seq transformer-based architecture. Since the current state-of-the-art Im2Seq model is TableFormer [9], we select this model to perform our experiments. The main contribution of this paper is the introduction of a new optimised table structure language (OTSL), specifically designed to describe table-structure in an compact and structured way for Im2Seq models. OTSL has a number of key features, which make it very attractive to use in Im2Seq models. Specifically, compared to other languages such as HTML, OTSL has a minimized vocabulary which yields short sequence length, strong inherent structure (e.g. strict rectangular layout) and a strict syntax with rules that only look backwards. The latter allows for syntax validation during inference and ensures a syntactically correct table-structure. These OTSL features are illustrated in Figure 1, in comparison to HTML. The paper is structured as follows. In section 2, we give an overview of the latest developments in table-structure reconstruction. In section 3 we review the current HTML table encoding (popularised by PubTabNet and FinTabNet) and discuss its flaws. Subsequently, we introduce OTSL in section 4, which includes the language definition, syntax rules and error-correction procedures. In section 5, we apply OTSL on the TableFormer architecture, compare it to TableFormer models trained on HTML and ultimately demonstrate the advantages of using OTSL. Finally, in section 6 we conclude our work and outline next potential steps. -2 Related Work +2 Related Work Approaches to formalize the logical structure and layout of tables in electronic documents date back more than two decades [16]. In the recent past, a wide variety of computer vision methods have been explored to tackle the problem of table structure recognition, i.e. the correct identification of columns, rows and spanning cells in a given table. Broadly speaking, the current deeplearning based approaches fall into three categories: object detection (OD) methods, Graph-Neural-Network (GNN) methods and Image-to-Markup-Sequence (Im2Seq) methods. Object-detection based methods [11,12,13,14,21] rely on tablestructure annotation using (overlapping) bounding boxes for training, and produce bounding-box predictions to define table cells, rows, and columns on a table image. Graph Neural Network (GNN) based methods [3,6,17,18], as the name suggests, represent tables as graph structures. The graph nodes represent the content of each table cell, an embedding vector from the table image, or geometric coordinates of the table cell. The edges of the graph define the relationship between the nodes, e.g. if they belong to the same column, row, or table cell. Other work [20] aims at predicting a grid for each table and deciding which cells must be merged using an attention network. Im2Seq methods cast the problem as a sequence generation task [4,5,9,22], and therefore need an internal tablestructure representation language, which is often implemented with standard markup languages (e.g. HTML, LaTeX, Markdown). In theory, Im2Seq methods have a natural advantage over the OD and GNN methods by virtue of directly predicting the table-structure. As such, no post-processing or rules are needed in order to obtain the table-structure, which is necessary with OD and GNN approaches. In practice, this is not entirely true, because a predicted sequence of table-structure markup does not necessarily have to be syntactically correct. Hence, depending on the quality of the predicted sequence, some post-processing needs to be performed to ensure a syntactically valid (let alone correct) sequence. Within the Im2Seq method, we find several popular models, namely the encoder-dual-decoder model (EDD) [22], TableFormer [9], Tabsplitter[2] and Ye et. al. [19]. EDD uses two consecutive long short-term memory (LSTM) decoders to predict a table in HTML representation. The tag decoder predicts a sequence of HTML tags. For each decoded table cell ( ), the attention is passed to the cell decoder to predict the content with an embedded OCR approach. The latter makes it susceptible to transcription errors in the cell content of the table. TableFormer address this reliance on OCR and uses two transformer decoders for HTML structure and cell bounding box prediction in an end-to-end architecture. The predicted cell bounding box is then used to extract text tokens from an originating (digital) PDF page, circumventing any need for OCR. TabSplitter [2] proposes a compact double-matrix representation of table rows and columns to do error detection and error correction of HTML structure sequences based on predictions from [19]. This compact double-matrix representation can not be used directly by the Img2seq model training, so the model uses HTML as an intermediate form. Chi et. al. [4] introduce a data set and a baseline method using bidirectional LSTMs to predict LaTeX code. Kayal [5] introduces Gated ResNet transformers to predict LaTeX code, and a separate OCR module to extract content. Im2Seq approaches have shown to be well-suited for the TSR task and allow a full end-to-end network design that can output the final table structure without pre- or post-processing logic. Furthermore, Im2Seq models have demonstrated to deliver state-of-the-art prediction accuracy [9]. This motivated the authors to investigate if the performance (both in accuracy and inference time) can be further improved by optimising the table structure representation language. We believe this is a necessary step before further improving neural network architectures for this task. -3 Problem Statement +3 Problem Statement All known Im2Seq based models for TSR fundamentally work in similar ways. Given an image of a table, the Im2Seq model predicts the structure of the table by generating a sequence of tokens. These tokens originate from a finite vocab- ulary and can be interpreted as a table structure. For example, with the HTML tokens ,
, , , and , one can construct simple table structures without any spanning cells. In reality though, one needs at least 28 HTML tokens to describe the most common complex tables observed in real-world documents [21,22], due to a variety of spanning cells definitions in the HTML token vocabulary.
-Fig. 2. Frequency of tokens in HTML and OTSL as they appear in PubTabNet.
Fig. 2. Frequency of tokens in HTML and OTSL as they appear in PubTabNet. @@ -35,48 +33,51 @@ In a valid HTML table, the token sequence must describe a 2D grid of table cells, serialised in row-major ordering, where each row and each column have the same length (while considering row- and column-spans). Furthermore, every opening tag in HTML needs to be matched by a closing tag in a correct hierarchical manner. Since the number of tokens for each table row and column can vary significantly, especially for large tables with many row- and column-spans, it is complex to verify the consistency of predicted structures during sequence generation. Implicitly, this also means that Im2Seq models need to learn these complex syntax rules, simply to deliver valid output. In practice, we observe two major issues with prediction quality when training Im2Seq models on HTML table structure generation from images. On the one hand, we find that on large tables, the visual attention of the model often starts to drift and is not accurately moving forward cell by cell anymore. This manifests itself in either in an increasing location drift for proposed table-cells in later rows on the same column or even complete loss of vertical alignment, as illustrated in Figure 5. Addressing this with post-processing is partially possible, but clearly undesired. On the other hand, we find many instances of predictions with structural inconsistencies or plain invalid HTML output, as shown in Figure 6, which are nearly impossible to properly correct. Both problems seriously impact the TSR model performance, since they reflect not only in the task of pure structure recognition but also in the equally crucial recognition or matching of table cell content. -4 Optimised Table Structure Language +4 Optimised Table Structure Language To mitigate the issues with HTML in Im2Seq-based TSR models laid out before, we propose here our Optimised Table Structure Language (OTSL). OTSL is designed to express table structure with a minimized vocabulary and a simple set of rules, which are both significantly reduced compared to HTML. At the same time, OTSL enables easy error detection and correction during sequence generation. We further demonstrate how the compact structure representation and minimized sequence length improves prediction accuracy and inference time in the TableFormer architecture. -4.1 Language Definition +4.1 Language Definition In Figure 3, we illustrate how the OTSL is defined. In essence, the OTSL defines only 5 tokens that directly describe a tabular structure based on an atomic 2D grid. The OTSL vocabulary is comprised of the following tokens: + -"C" cell a new table cell that either has or does not have cell content -"L" cell left-looking cell , merging with the left neighbor cell to create a span -"U" cell up-looking cell , merging with the upper neighbor cell to create a span -"X" cell cross cell , to merge with both left and upper neighbor cells -"NL" new-line , switch to the next row. + A notable attribute of OTSL is that it has the capability of achieving lossless conversion to HTML. -Fig. 3. OTSL description of table structure: A - table example; B - graphical representation of table structure; C - mapping structure on a grid; D - OTSL structure encoding; E - explanation on cell encoding
Fig. 3. OTSL description of table structure: A - table example; B - graphical representation of table structure; C - mapping structure on a grid; D - OTSL structure encoding; E - explanation on cell encoding
-4.2 Language Syntax +4.2 Language Syntax The OTSL representation follows these syntax rules: + 1. Left-looking cell rule : The left neighbour of an "L" cell must be either another "L" cell or a "C" cell. 2. Up-looking cell rule : The upper neighbour of a "U" cell must be either another "U" cell or a "C" cell. -3. Cross cell rule : + +3. Cross cell rule : + The left neighbour of an "X" cell must be either another "X" cell or a "U" cell, and the upper neighbour of an "X" cell must be either another "X" cell or an "L" cell. 4. First row rule : Only "L" cells and "C" cells are allowed in the first row. 5. First column rule : Only "U" cells and "C" cells are allowed in the first column. 6. Rectangular rule : The table representation is always rectangular - all rows must have an equal number of tokens, terminated with "NL" token. + The application of these rules gives OTSL a set of unique properties. First of all, the OTSL enforces a strictly rectangular structure representation, where every new-line token starts a new row. As a consequence, all rows and all columns have exactly the same number of tokens, irrespective of cell spans. Secondly, the OTSL representation is unambiguous: Every table structure is represented in one way. In this representation every table cell corresponds to a "C"-cell token, which in case of spans is always located in the top-left corner of the table cell definition. Third, OTSL syntax rules are only backward-looking. As a consequence, every predicted token can be validated straight during sequence generation by looking at the previously predicted sequence. As such, OTSL can guarantee that every predicted sequence is syntactically valid. These characteristics can be easily learned by sequence generator networks, as we demonstrate further below. We find strong indications that this pattern reduces significantly the column drift seen in the HTML based models (see Figure 5). -4.3 Error-detection and -mitigation +4.3 Error-detection and -mitigation The design of OTSL allows to validate a table structure easily on an unfinished sequence. The detection of an invalid sequence token is a clear indication of a prediction mistake, however a valid sequence by itself does not guarantee prediction correctness. Different heuristics can be used to correct token errors in an invalid sequence and thus increase the chances for accurate predictions. Such heuristics can be applied either after the prediction of each token, or at the end on the entire predicted sequence. For example a simple heuristic which can correct the predicted OTSL sequence on-the-fly is to verify if the token with the highest prediction confidence invalidates the predicted sequence, and replace it by the token with the next highest confidence until OTSL rules are satisfied. -5 Experiments +5 Experiments To evaluate the impact of OTSL on prediction accuracy and inference times, we conducted a series of experiments based on the TableFormer model (Figure 4) with two objectives: Firstly we evaluate the prediction quality and performance of OTSL vs. HTML after performing Hyper Parameter Optimization (HPO) on the canonical PubTabNet data set. Secondly we pick the best hyper-parameters found in the first step and evaluate how OTSL impacts the performance of TableFormer after training on other publicly available data sets (FinTabNet, PubTables-1M [14]). The ground truth (GT) from all data sets has been converted into OTSL format for this purpose, and will be made publicly available. -Fig. 4. Architecture sketch of the TableFormer model, which is a representative for the Im2Seq approach.
Fig. 4. Architecture sketch of the TableFormer model, which is a representative for the Im2Seq approach.
We rely on standard metrics such as Tree Edit Distance score (TEDs) for table structure prediction, and Mean Average Precision (mAP) with 0.75 Intersection Over Union (IOU) threshold for the bounding-box predictions of table cells. The predicted OTSL structures were converted back to HTML format in order to compute the TED score. Inference timing results for all experiments were obtained from the same machine on a single core with AMD EPYC 7763 CPU @2.45 GHz. -5.1 Hyper Parameter Optimization +5.1 Hyper Parameter Optimization We have chosen the PubTabNet data set to perform HPO, since it includes a highly diverse set of tables. Also we report TED scores separately for simple and complex tables (tables with cell spans). Results are presented in Table. 1. It is evident that with OTSL, our model achieves the same TED score and slightly better mAP scores in comparison to HTML. However OTSL yields a 2x speed up in the inference runtime over HTML. -Table 1. HPO performed in OTSL and HTML representation on the same transformer-based TableFormer [9] architecture, trained only on PubTabNet [22]. Effects of reducing the # of layers in encoder and decoder stages of the model show that smaller models trained on OTSL perform better, especially in recognizing complex table structures, and maintain a much higher mAP score than the HTML counterpart. @@ -88,10 +89,9 @@ HTML0.9010.915 0.9310.859 0.8341.91 3.8142OTSL HTML0.952 0.9440.92 0.9030.942 0.9310.857 0.8241.22 2
Table 1. HPO performed in OTSL and HTML representation on the same transformer-based TableFormer [9] architecture, trained only on PubTabNet [22]. Effects of reducing the # of layers in encoder and decoder stages of the model show that smaller models trained on OTSL perform better, especially in recognizing complex table structures, and maintain a much higher mAP score than the HTML counterpart.
-5.2 Quantitative Results +5.2 Quantitative Results We picked the model parameter configuration that produced the best prediction quality (enc=6, dec=6, heads=8) with PubTabNet alone, then independently trained and evaluated it on three publicly available data sets: PubTabNet (395k samples), FinTabNet (113k samples) and PubTables-1M (about 1M samples). Performance results are presented in Table. 2. It is clearly evident that the model trained on OTSL outperforms HTML across the board, keeping high TEDs and mAP scores even on difficult financial tables (FinTabNet) that contain sparse and large tables. Additionally, the results show that OTSL has an advantage over HTML when applied on a bigger data set like PubTables-1M and achieves significantly improved scores. Finally, OTSL achieves faster inference due to fewer decoding steps which is a result of the reduced sequence representation. -Table 2. TSR and cell detection results compared between OTSL and HTML on the PubTabNet [22], FinTabNet [21] and PubTables-1M [14] data sets using TableFormer [9] (with enc=6, dec=6, heads=8). @@ -104,29 +104,30 @@ PubTables-1MOTSL0.9870.9640.9770.8961.79PubTables-1MHTML0.9830.9440.9660.8893.26
Table 2. TSR and cell detection results compared between OTSL and HTML on the PubTabNet [22], FinTabNet [21] and PubTables-1M [14] data sets using TableFormer [9] (with enc=6, dec=6, heads=8).
-5.3 Qualitative Results +5.3 Qualitative Results To illustrate the qualitative differences between OTSL and HTML, Figure 5 demonstrates less overlap and more accurate bounding boxes with OTSL. In Figure 6, OTSL proves to be more effective in handling tables with longer token sequences, resulting in even more precise structure prediction and bounding boxes. -Fig. 5. The OTSL model produces more accurate bounding boxes with less overlap (E) than the HTML model (D), when predicting the structure of a sparse table (A), at twice the inference speed because of shorter sequence length (B),(C). "PMC2807444_006_00.png" PubTabNet. μ
Fig. 5. The OTSL model produces more accurate bounding boxes with less overlap (E) than the HTML model (D), when predicting the structure of a sparse table (A), at twice the inference speed because of shorter sequence length (B),(C). "PMC2807444_006_00.png" PubTabNet. μ
μ -Fig. 6. Visualization of predicted structure and detected bounding boxes on a complex table with many rows. The OTSL model (B) captured repeating pattern of horizontally merged cells from the GT (A), unlike the HTML model (C). The HTML model also didn't complete the HTML sequence correctly and displayed a lot more of drift and overlap of bounding boxes. "PMC5406406_003_01.png" PubTabNet.
Fig. 6. Visualization of predicted structure and detected bounding boxes on a complex table with many rows. The OTSL model (B) captured repeating pattern of horizontally merged cells from the GT (A), unlike the HTML model (C). The HTML model also didn't complete the HTML sequence correctly and displayed a lot more of drift and overlap of bounding boxes. "PMC5406406_003_01.png" PubTabNet.
-6 Conclusion +6 Conclusion We demonstrated that representing tables in HTML for the task of table structure recognition with Im2Seq models is ill-suited and has serious limitations. Furthermore, we presented in this paper an Optimized Table Structure Language (OTSL) which, when compared to commonly used general purpose languages, has several key benefits. First and foremost, given the same network configuration, inference time for a table-structure prediction is about 2 times faster compared to the conventional HTML approach. This is primarily owed to the shorter sequence length of the OTSL representation. Additional performance benefits can be obtained with HPO (hyper parameter optimization). As we demonstrate in our experiments, models trained on OTSL can be significantly smaller, e.g. by reducing the number of encoder and decoder layers, while preserving comparatively good prediction quality. This can further improve inference performance, yielding 5-6 times faster inference speed in OTSL with prediction quality comparable to models trained on HTML (see Table 1). Secondly, OTSL has more inherent structure and a significantly restricted vocabulary size. This allows autoregressive models to perform better in the TED metric, but especially with regards to prediction accuracy of the table-cell bounding boxes (see Table 2). As shown in Figure 5, we observe that the OTSL drastically reduces the drift for table cell bounding boxes at high row count and in sparse tables. This leads to more accurate predictions and a significant reduction in post-processing complexity, which is an undesired necessity in HTML-based Im2Seq models. Significant novelty lies in OTSL syntactical rules, which are few, simple and always backwards looking. Each new token can be validated only by analyzing the sequence of previous tokens, without requiring the entire sequence to detect mistakes. This in return allows to perform structural error detection and correction on-the-fly during sequence generation. -References +References + 1. Auer, C., Dolfi, M., Carvalho, A., Ramis, C.B., Staar, P.W.J.: Delivering document conversion as a cloud service with high throughput and responsiveness. CoRR abs/2206.00785 (2022). https://doi.org/10.48550/arXiv.2206.00785 , https://doi.org/10.48550/arXiv.2206.00785 2. Chen, B., Peng, D., Zhang, J., Ren, Y., Jin, L.: Complex table structure recognition in the wild using transformer and identity matrix-based augmentation. In: Porwal, U., Fornés, A., Shafait, F. (eds.) Frontiers in Handwriting Recognition. pp. 545561. Springer International Publishing, Cham (2022) 3. Chi, Z., Huang, H., Xu, H.D., Yu, H., Yin, W., Mao, X.L.: Complicated table structure recognition. arXiv preprint arXiv:1908.04729 (2019) 4. Deng, Y., Rosenberg, D., Mann, G.: Challenges in end-to-end neural scientific table recognition. In: 2019 International Conference on Document Analysis and Recognition (ICDAR). pp. 894-901. IEEE (2019) + + 5. Kayal, P., Anand, M., Desai, H., Singh, M.: Tables to latex: structure and content extraction from scientific tables. International Journal on Document Analysis and Recognition (IJDAR) pp. 1-10 (2022) 6. Lee, E., Kwon, J., Yang, H., Park, J., Lee, S., Koo, H.I., Cho, N.I.: Table structure recognition based on grid shape graph. In: 2022 Asia-Pacific Signal and Information Processing Association Annual Summit and Conference (APSIPA ASC). pp. 18681873. IEEE (2022) 7. Li, M., Cui, L., Huang, S., Wei, F., Zhou, M., Li, Z.: Tablebank: A benchmark dataset for table detection and recognition (2019) @@ -140,6 +141,8 @@ 15. Staar, P.W.J., Dolfi, M., Auer, C., Bekas, C.: Corpus conversion service: A machine learning platform to ingest documents at scale. In: Proceedings of the 24th ACM SIGKDD International Conference on Knowledge Discovery & Data Mining. pp. 774-782. KDD '18, Association for Computing Machinery, New York, NY, USA (2018). https://doi.org/10.1145/3219819.3219834 , https://doi.org/10. 1145/3219819.3219834 16. Wang, X.: Tabular Abstraction, Editing, and Formatting. Ph.D. thesis, CAN (1996), aAINN09397 17. Xue, W., Li, Q., Tao, D.: Res2tim: Reconstruct syntactic structures from table images. In: 2019 International Conference on Document Analysis and Recognition (ICDAR). pp. 749-755. IEEE (2019) + + 18. Xue, W., Yu, B., Wang, W., Tao, D., Li, Q.: Tgrnet: A table graph reconstruction network for table structure recognition. In: Proceedings of the IEEE/CVF International Conference on Computer Vision. pp. 1295-1304 (2021) 19. Ye, J., Qi, X., He, Y., Chen, Y., Gu, D., Gao, P., Xiao, R.: Pingan-vcgroup's solution for icdar 2021 competition on scientific literature parsing task b: Table recognition to html (2021). https://doi.org/10.48550/ARXIV.2105.01848 , https://arxiv.org/abs/2105.01848 20. Zhang, Z., Zhang, J., Du, J., Wang, F.: Split, embed and merge: An accurate table structure recognizer. Pattern Recognition 126 , 108565 (2022) diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt b/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt index e3454a06..8665cccf 100644 --- a/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.doctags.txt @@ -3,13 +3,13 @@
-Row and Column Access Control Support in IBM DB2 for i +Row and Column Access Control Support in IBM DB2 for i Implement roles and separation of duties Leverage row permissions on the database Protect columns by defining column masks Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan Redpaper -Contents +Contents Notices. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii @@ -61,23 +61,26 @@
-Highlights +Highlights + GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH +
Power Services -DB2 for i Center of Excellence +DB2 for i Center of ExcellenceExpert help to achieve your business requirements -We build confident, satisfied clients +We build confident, satisfied clientsNo one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you.Because no one else is IBM.With combined experiences and direct access to development groups, we're the experts in IBM DB2® for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions. -Who we are, some of what we do +Who we are, some of what we doGlobal CoE engagements cover topics including: + r Database performance and scalability r Advanced SQL knowledge and skills transfer r Business intelligence and analytics @@ -87,7 +90,8 @@ r Data-centric architecture and design r Extremely large database and overcoming limits to growth r ISV education and enablement -Preface + +PrefaceThis IBMfi Redpaper™ publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment.This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed.This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US. @@ -99,50 +103,56 @@ Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office.Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master's degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com . -Authors +Authors
Chapter 1.1 -Securing and protecting IBM DB2 data +Securing and protecting IBM DB2 dataRecent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record.Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement.This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter: + GLYPH Security fundamentals GLYPH Current state of IBM i security GLYPH DB2 for i security controls -1.1 Security fundamentals + +1.1 Security fundamentalsBefore reviewing database security techniques, there are two fundamental steps in securing information assets that must be described: + GLYPH First, and most important, is the definition of a company's security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability. The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured. +A security policy is what defines whether the system and its settings are secure (or not). + GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets. +With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i. -1.2 Current state of IBM i security +1.2 Current state of IBM i securityBecause of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE.Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company's most valuable assets, which is the data.Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today's connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data.Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage. -1.3.1 Existing row and column control +1.3.1 Existing row and column controlSome IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator.Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases.Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view. -
-2.1.6 Change Function Usage CL command +2.1.6 Change Function Usage CL commandThe following CL commands can be used to work with, display, or change function usage IDs: + GLYPH Work Function Usage ( WRKFCNUSG ) GLYPH Change Function Usage ( CHGFCNUSG ) GLYPH Display Function Usage ( DSPFCNUSG ) +For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED) -2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view +2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE viewThe FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view. -
Figure 1-2 Existing row and column controls Figure 1-2 Existing row and column controls Table 2-1 FUNCTION_USAGE view
@@ -155,7 +165,7 @@ To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1.Example 2-1 Query to determine who has authority to define and manage RCACSELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id='QIBM_DB_SECADM' ORDER BY user_name; -2.2 Separation of duties +2.2 Separation of dutiesSeparation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa's job description was only to manage its security.In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table. @@ -163,7 +173,6 @@ QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table.A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself.Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools. -
Table 2-1 FUNCTION_USAGE view Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
@@ -181,16 +190,13 @@ MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)XXCHANGE PLAN CACHE SIZE procedure (currently does not check authority)XX
Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority
-The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules. -Figure 3-1 CREATE PERMISSION SQL statement
The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules.Figure 3-1 CREATE PERMISSION SQL statement
-Column mask +Column mask A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number. Table 3-1 summarizes these special registers and their values. -Table 3-1 Special registers and their corresponding values @@ -200,21 +206,21 @@ SYSTEM_USERThe authorization ID that initiated the connection.
Table 3-1 Special registers and their corresponding values
Figure 3-5 shows the difference in the special register values when an adopted authority is used: + GLYPH A user connects to the server using the user profile ALICE. GLYPH USER and CURRENT USER initially have the same value of ALICE. GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE's authority when it is called. GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority. GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE. -Figure 3-5 Special registers and adopted authority +
Figure 3-5 Special registers and adopted authority
-3.2.2 Built-in global variables +3.2.2 Built-in global variables Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables. IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic. Table 3-2 lists the nine built-in global variables. -Table 3-2 Built-in global variables @@ -229,58 +235,70 @@ ROUTINE_SPECIFIC_NAMEVARCHAR(128)Name of the currently running routineROUTINE_TYPECHAR(1)Type of the currently running routine
Table 3-2 Built-in global variables
-3.3 VERIFY_GROUP_FOR_USER function +3.3 VERIFY_GROUP_FOR_USER function The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error. If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value. Here is an example of using the VERIFY_GROUP_FOR_USER function: + 1. There are user profiles for MGR, JANE, JUDY, and TONY. 2. The user profile JANE specifies a group profile of MGR. 3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1: + VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY') RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ; + 2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones: -Human Resources can see the unmasked TAX_ID of the employees. -Employees can see only their own unmasked TAX_ID. -Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234). -Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX. To implement this column mask, run the SQL statement that is shown in Example 3-9. + Example 3-9 Creating a mask on the TAX_ID column CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; + 3. Figure 3-10 shows the masks that are created in the HR_SCHEMA. -Figure 3-10 Column masks shown in System i Navigator +
Figure 3-10 Column masks shown in System i Navigator
-3.6.6 Activating RCAC +3.6.6 Activating RCAC Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps: + 1. Run the SQL statements that are shown in Example 3-10. -Example 3-10 Activating RCAC on the EMPLOYEES table + +Example 3-10 Activating RCAC on the EMPLOYEES table + /* Active Row Access Control (permissions) */ + /* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL; */ + 2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas  HR_SCHEMA  Tables , right-click the EMPLOYEES table, and click Definition . -Figure 3-11 Selecting the EMPLOYEES table from System i Navigator +
Figure 3-11 Selecting the EMPLOYEES table from System i Navigator
+ 2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause. -Figure 4-68 Visual Explain with RCAC enabled +
Figure 4-68 Visual Explain with RCAC enabled
+ 3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause. -Figure 4-69 Index advice with no RCAC +
Figure 4-69 Index advice with no RCAC
THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ; Back cover -Row and Column Access Control Support in IBM DB2 for i +Row and Column Access Control Support in IBM DB2 for i Implement roles and separation of duties Leverage row permissions on the database Protect columns by defining column masks diff --git a/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json b/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json index 5765cb25..c83414a2 100644 --- a/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json +++ b/tests/data/groundtruth/docling_v2/redp5110_sampled.pages.json @@ -1 +1 @@ -[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] +[{"page_no": 0, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}, {"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 1, "page_no": 0, "cluster": {"id": 1, "label": "text", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Redpaper", "bbox": {"l": 314.70001, "t": 711.50856, "r": 580.52002, "b": 773.772959, "coord_origin": "TOPLEFT"}}]}, "text": "Redpaper"}, {"label": "text", "id": 2, "page_no": 0, "cluster": {"id": 2, "label": "text", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 3, "text": "Front cover", "bbox": {"l": 287.82001, "t": 28.54803000000004, "r": 418.83356, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Front cover"}, {"label": "section_header", "id": 3, "page_no": 0, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 35.68840408325195, "t": 82.3943099975586, "r": 584.64288, "b": 166.40553283691406, "coord_origin": "TOPLEFT"}, "confidence": 0.8281131386756897, "cells": [{"id": 4, "text": "Row and Column Access Control ", "bbox": {"l": 35.700001, "t": 84.58654999999987, "r": 584.64288, "b": 122.82097999999996, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Support in IBM DB2 for i", "bbox": {"l": 35.700001, "t": 127.60668999999996, "r": 447.66919000000007, "b": 165.84113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 4, "page_no": 0, "cluster": {"id": 4, "label": "text", "bbox": {"l": 497.0279846191406, "t": 573.8836669921875, "r": 581.8246459960938, "b": 699.171630859375, "coord_origin": "TOPLEFT"}, "confidence": 0.7621812224388123, "cells": [{"id": 6, "text": "Jim Bainbridge", "bbox": {"l": 509.22, "t": 575.71201, "r": 581.34119, "b": 586.392, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Hernando Bedoya", "bbox": {"l": 497.70001, "t": 589.752, "r": 581.3736, "b": 600.43199, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Rob Bestgen", "bbox": {"l": 521.40002, "t": 603.73199, "r": 581.34003, "b": 614.4119900000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "Mike Cain", "bbox": {"l": 534.12, "t": 617.71199, "r": 581.31598, "b": 628.39198, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Dan Cruikshank", "bbox": {"l": 505.43999999999994, "t": 631.75198, "r": 581.29077, "b": 642.4319800000001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Jim Denton", "bbox": {"l": 527.22003, "t": 645.73198, "r": 581.29926, "b": 656.41197, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Doug Mack", "bbox": {"l": 527.64001, "t": 659.71198, "r": 581.30884, "b": 670.39197, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Tom McKinley", "bbox": {"l": 514.38, "t": 673.75197, "r": 581.38678, "b": 684.43197, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Kent Milligan", "bbox": {"l": 518.82001, "t": 687.73197, "r": 581.33759, "b": 698.411972, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge Hernando Bedoya Rob Bestgen Mike Cain Dan Cruikshank Jim Denton Doug Mack Tom McKinley Kent Milligan"}, {"label": "text", "id": 5, "page_no": 0, "cluster": {"id": 5, "label": "text", "bbox": {"l": 35.0073127746582, "t": 294.7938232421875, "r": 216.00064, "b": 325.56058, "coord_origin": "TOPLEFT"}, "confidence": 0.8502883315086365, "cells": [{"id": 15, "text": "Implement roles and separation ", "bbox": {"l": 36.119999, "t": 296.13828, "r": 216.00064, "b": 308.58047, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "of duties", "bbox": {"l": 36.119999, "t": 313.11838000000006, "r": 84.527145, "b": 325.56058, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 6, "page_no": 0, "cluster": {"id": 6, "label": "text", "bbox": {"l": 34.56448745727539, "t": 348.9540710449219, "r": 202.45404, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}, "confidence": 0.8639552593231201, "cells": [{"id": 17, "text": "Leverage", "bbox": {"l": 35.759315, "t": 350.13881999999995, "r": 80.409691, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "row permissions on ", "bbox": {"l": 151.8503, "t": 350.13881999999995, "r": 202.45404, "b": 362.58102, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "the", "bbox": {"l": 35.759315, "t": 367.11893, "r": 50.758106, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "database", "bbox": {"l": 86.755211, "t": 367.11893, "r": 107.75352000000001, "b": 379.56112999999993, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 7, "page_no": 0, "cluster": {"id": 7, "label": "text", "bbox": {"l": 35.171409606933594, "t": 402.6540832519531, "r": 195.2753, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}, "confidence": 0.842113196849823, "cells": [{"id": 21, "text": "Protect", "bbox": {"l": 36.059887, "t": 404.13937, "r": 73.020607, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "columns by defining ", "bbox": {"l": 152.62831, "t": 404.13937, "r": 195.2753, "b": 416.58157, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "column", "bbox": {"l": 36.059887, "t": 421.11948, "r": 73.311806, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "masks", "bbox": {"l": 73.311806, "t": 421.11948, "r": 117.33681, "b": 433.56167999999997, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "picture", "id": 8, "page_no": 0, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 513.4560546875, "t": 26.085098266601562, "r": 586.1583251953125, "b": 54.81915283203125, "coord_origin": "TOPLEFT"}, "confidence": 0.9272357225418091, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 36.894657135009766, "t": 749.8662109375, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}, "confidence": 0.7180292010307312, "cells": [{"id": 0, "text": "ibm.com", "bbox": {"l": 36.900002, "t": 751.23, "r": 98.600998, "b": 765.105, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "/redbooks", "bbox": {"l": 98.580002, "t": 751.23, "r": 164.4585, "b": 765.105, "coord_origin": "TOPLEFT"}}]}, "text": "ibm.com /redbooks"}]}}, {"page_no": 1, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"3": {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}, {"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 1, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.6857681274414, "t": 73.01808166503906, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9508246779441833, "cells": [{"id": 2, "text": "Contents", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 168.73441, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Contents"}, {"label": "table", "id": 3, "page_no": 1, "cluster": {"id": 3, "label": "table", "bbox": {"l": 136.15103149414062, "t": 132.03030395507812, "r": 549.84723, "b": 715.6527709960938, "coord_origin": "TOPLEFT"}, "confidence": 0.9803490042686462, "cells": [{"id": 3, "text": "Notices", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Trademarks", "bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 530.05121, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "viii", "bbox": {"l": 535.5827, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "DB2 for i Center of Excellence", "bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Preface", "bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Now you can become a published author, too!", "bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 530.00812, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "xiii", "bbox": {"l": 535.53925, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "xiii", "bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Stay connected to IBM Redbooks", "bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 529.48242, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "xiv", "bbox": {"l": 534.99829, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Chapter 1. Securing and protecting IBM DB2 data", "bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 373.17566, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": " . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 375.11798, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "1", "bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1.1", "bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 150.88702, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "bbox": {"l": 156.5226, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "1.2", "bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 150.62746, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15923, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "2", "bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "1.3", "bbox": {"l": 136.79807, "t": 299.62595, "r": 150.84943, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "bbox": {"l": 156.46996, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "1.3.1", "bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 173.38289, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.92932, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "4", "bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "1.3.2", "bbox": {"l": 151.1972, "t": 324.64548, "r": 173.4189, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97432, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "5", "bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "Chapter 2. Roles and separation of duties", "bbox": {"l": 136.79704, "t": 347.14511, "r": 336.82071, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 338.99701, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "7", "bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "2.1", "bbox": {"l": 136.79704, "t": 359.14493, "r": 150.644, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18277, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "8", "bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "2.1.1", "bbox": {"l": 151.1972, "t": 371.62482, "r": 173.60995, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "bbox": {"l": 176.41154, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "8", "bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "2.1.2", "bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 173.41664, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97151, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "8", "bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "2.1.3", "bbox": {"l": 151.1972, "t": 396.64435, "r": 173.41859, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.97394, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "9", "bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "2.1.4", "bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 173.38629, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "Database Information function: QIBM_DB_SYSMON", "bbox": {"l": 178.93356, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": ". . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 536.08411, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "9", "bbox": {"l": 541.63135, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "2.1.5", "bbox": {"l": 151.1972, "t": 421.60413, "r": 173.44926, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.01228, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "9", "bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "2.1.6", "bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 173.32208, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8533, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "10", "bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "2.1.7", "bbox": {"l": 151.1972, "t": 446.62366, "r": 173.35822, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "bbox": {"l": 178.89848, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "10", "bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "2.2", "bbox": {"l": 136.79704, "t": 459.10355, "r": 150.85457, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "bbox": {"l": 156.47758, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Chapter 3. Row and Column Access Control", "bbox": {"l": 136.79703, "t": 481.60318, "r": 348.68503, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 350.09741, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "13", "bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "3.1", "bbox": {"l": 136.79703, "t": 493.603, "r": 150.70105, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.26266, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "14", "bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "3.1.1", "bbox": {"l": 151.19719, "t": 506.14264, "r": 173.35429, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "Row permission and column mask definitions", "bbox": {"l": 178.89357, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 383.74713, "t": 506.14264, "r": 530.5379, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "14", "bbox": {"l": 536.07721, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "3.1.2", "bbox": {"l": 151.19719, "t": 518.62253, "r": 173.44292, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00435, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "16", "bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "3.2", "bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 150.64432, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 81, "text": "Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.18323, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 82, "text": "18", "bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}}, {"id": 83, "text": "3.2.1", "bbox": {"l": 151.19719, "t": 543.64204, "r": 173.41321, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 84, "text": "Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.96722, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 85, "text": "18", "bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}}, {"id": 86, "text": "3.2.2", "bbox": {"l": 151.19719, "t": 556.12192, "r": 173.35269, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 87, "text": "Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89156, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 88, "text": "19", "bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}}, {"id": 89, "text": "3.3", "bbox": {"l": 136.79703, "t": 568.66156, "r": 150.62514, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 90, "text": "VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.15639, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 91, "text": "20", "bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}}, {"id": 92, "text": "3.4", "bbox": {"l": 136.79703, "t": 581.14143, "r": 150.63004, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 93, "text": "Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "bbox": {"l": 156.16325, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 94, "text": "21", "bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}}, {"id": 95, "text": "3.5", "bbox": {"l": 136.79701, "t": 593.62131, "r": 150.64413, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 96, "text": "SELECT, INSERT, and UPDATE behavior with RCAC", "bbox": {"l": 156.18298, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 97, "text": ". . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 400.32065, "t": 593.62131, "r": 530.48358, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 98, "text": "22", "bbox": {"l": 536.0224, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}}, {"id": 99, "text": "3.6", "bbox": {"l": 136.79701, "t": 606.16095, "r": 150.6642, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 100, "text": "Human resources example . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 156.21107, "t": 606.16095, "r": 530.56512, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 101, "text": "22", "bbox": {"l": 536.112, "t": 606.16095, "r": 547.20575, "b": 615.37395, "coord_origin": "TOPLEFT"}}, {"id": 102, "text": "3.6.1", "bbox": {"l": 151.19717, "t": 618.64082, "r": 173.41692, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 103, "text": "Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "bbox": {"l": 178.97185, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 104, "text": "23", "bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}}, {"id": 105, "text": "3.6.2", "bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 173.32271, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 106, "text": "Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.8541, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 107, "text": "23", "bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}}, {"id": 108, "text": "3.6.3", "bbox": {"l": 151.19717, "t": 643.66034, "r": 173.32227, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 109, "text": "Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.85353, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 110, "text": "24", "bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}}, {"id": 111, "text": "3.6.4", "bbox": {"l": 151.19717, "t": 656.14021, "r": 173.35289, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 112, "text": "Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.89182, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 113, "text": "25", "bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}}, {"id": 114, "text": "3.6.5", "bbox": {"l": 151.19717, "t": 668.62009, "r": 173.35289, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 115, "text": "Defining and creating column masks", "bbox": {"l": 178.89182, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 116, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 344.98996, "t": 668.62009, "r": 530.54413, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 117, "text": "26", "bbox": {"l": 536.08301, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}}, {"id": 118, "text": "3.6.6", "bbox": {"l": 151.19717, "t": 681.15973, "r": 173.38359, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 119, "text": "Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 178.93019, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 120, "text": "28", "bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}}, {"id": 121, "text": "3.6.7", "bbox": {"l": 151.19717, "t": 693.63961, "r": 173.32332, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 122, "text": "Demonstrating data access with RCAC", "bbox": {"l": 178.85486, "t": 693.63961, "r": 350.80011, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 123, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 356.33163, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 124, "text": "29", "bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}}, {"id": 125, "text": "3.6.8", "bbox": {"l": 151.19717, "t": 706.119492, "r": 173.44592, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 126, "text": "Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "bbox": {"l": 179.00812, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}}, {"id": 127, "text": "32", "bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 43, "num_cols": 2, "table_cells": [{"bbox": {"l": 136.8, "t": 132.64862000000005, "r": 172.89404, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Notices", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01952, "t": 132.64862000000005, "r": 547.18982, "b": 141.86163, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . vii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 145.12847999999997, "r": 189.86537, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Trademarks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 195.39685, "t": 145.12847999999997, "r": 547.18286, "b": 154.34149000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . viii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 167.62811, "r": 279.39731, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DB2 for i Center of Excellence", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 280.61942, "t": 167.62811, "r": 547.1908, "b": 176.84113000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . ix", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79901, "t": 190.12775, "r": 172.84424, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Preface", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 175.01852, "t": 190.12775, "r": 547.18286, "b": 199.34076000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 202.60760000000005, "r": 547.18085, "b": 211.82061999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Authors . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xi", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 215.14721999999995, "r": 339.18292, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Now you can become a published author, too!", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.71411, "t": 215.14721999999995, "r": 547.13879, "b": 224.36023, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79803, "t": 227.62707999999998, "r": 529.99506, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Comments welcome. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.5495, "t": 227.62707999999998, "r": 547.19788, "b": 236.84009000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "xiii", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 240.10693000000003, "r": 284.02866, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Stay connected to IBM Redbooks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.54449, "t": 240.10693000000003, "r": 547.12115, "b": 249.31994999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . xiv", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 262.60657000000003, "r": 536.09589, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 1. Securing and protecting IBM DB2 data . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64685, "t": 262.60657000000003, "r": 547.19781, "b": 271.81958, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "1", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79808, "t": 274.60637999999994, "r": 549.84723, "b": 283.8194, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.1 Security fundamentals. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 287.14606000000003, "r": 536.12933, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.2 Current state of IBM i security . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66113, "t": 287.14606000000003, "r": 547.19287, "b": 296.35904, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "2", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79807, "t": 299.62595, "r": 549.84723, "b": 308.83893, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3 DB2 for i security controls . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 312.1058300000001, "r": 536.05511, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.1 Existing row and column control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6015, "t": 312.1058300000001, "r": 547.14795, "b": 321.3188200000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "4", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 324.64548, "r": 536.08008, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "1.3.2 New controls: Row and Column Access Control. . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.6355, "t": 324.64548, "r": 547.19092, "b": 333.8584599999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 13, "end_row_offset_idx": 14, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "5", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 347.14511, "r": 536.09088, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 2. Roles and separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.64282, "t": 347.14511, "r": 547.19476, "b": 356.35809, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 14, "end_row_offset_idx": 15, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "7", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 359.14493, "r": 536.12714, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1 Roles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.66589, "t": 359.14493, "r": 547.20471, "b": 368.35791, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 15, "end_row_offset_idx": 16, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 371.62482, "r": 535.9527, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.1 DDM and DRDA application server access: QIBM_DB_DDMDRDA . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.55585, "t": 371.62482, "r": 547.15906, "b": 380.8378000000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 16, "end_row_offset_idx": 17, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 384.10470999999995, "r": 536.04108, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.2 Toolbox application server access: QIBM_DB_ZDA. . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59595, "t": 384.10470999999995, "r": 547.15082, "b": 393.31769, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 17, "end_row_offset_idx": 18, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "8", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 396.64435, "r": 536.07489, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.3 Database Administrator function: QIBM_DB_SQLADM . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.63025, "t": 396.64435, "r": 547.18561, "b": 405.85733, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 18, "end_row_offset_idx": 19, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 409.12424000000004, "r": 411.27048, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.4 Database Information function: QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 416.81775, "t": 409.12424000000004, "r": 547.17865, "b": 418.33722, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 19, "end_row_offset_idx": 20, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . 9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 421.60413, "r": 536.03589, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.5 Security Administrator function: QIBM_DB_SECADM . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 541.59894, "t": 421.60413, "r": 547.16193, "b": 430.81711, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 20, "end_row_offset_idx": 21, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "9", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 434.1437700000001, "r": 530.57318, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.6 Change Function Usage CL command . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10443, "t": 434.1437700000001, "r": 547.16687, "b": 443.35675, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 21, "end_row_offset_idx": 22, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.1972, "t": 446.62366, "r": 530.53522, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0755, "t": 446.62366, "r": 547.15601, "b": 455.83663999999993, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 22, "end_row_offset_idx": 23, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79704, "t": 459.10355, "r": 547.25659, "b": 468.31653, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 23, "end_row_offset_idx": 24, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "2.2 Separation of duties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 481.60318, "r": 530.53961, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Chapter 3. Row and Column Access Control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09167, "t": 481.60318, "r": 547.1958, "b": 490.81616, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 24, "end_row_offset_idx": 25, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "13", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 493.603, "r": 530.4809, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1 Explanation of RCAC and the concept of access control . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04248, "t": 493.603, "r": 547.16571, "b": 502.81598, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 25, "end_row_offset_idx": 26, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 506.14264, "r": 378.20786, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.1 Row permission and column mask definitions", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 383.74713, "t": 506.14264, "r": 547.15576, "b": 515.35562, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 26, "end_row_offset_idx": 27, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . 14", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 518.62253, "r": 530.43475, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.1.2 Enabling and activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99622, "t": 518.62253, "r": 547.11908, "b": 527.83551, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 27, "end_row_offset_idx": 28, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "16", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 531.1621700000001, "r": 530.52808, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2 Special registers and built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06702, "t": 531.1621700000001, "r": 547.14484, "b": 540.37517, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 28, "end_row_offset_idx": 29, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 543.64204, "r": 530.49786, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.1 Special registers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.05188, "t": 543.64204, "r": 547.15991, "b": 552.8550399999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 29, "end_row_offset_idx": 30, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "18", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19719, "t": 556.12192, "r": 530.56024, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.2.2 Built-in global variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09912, "t": 556.12192, "r": 547.17688, "b": 565.33492, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 30, "end_row_offset_idx": 31, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "19", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 568.66156, "r": 530.53027, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.3 VERIFY_GROUP_FOR_USER function . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.06152, "t": 568.66156, "r": 547.12402, "b": 577.87456, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 31, "end_row_offset_idx": 32, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "20", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79703, "t": 581.14143, "r": 530.62994, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.4 Establishing and controlling accessibility by using the RCAC rule text . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.16315, "t": 581.14143, "r": 547.22955, "b": 590.35443, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 32, "end_row_offset_idx": 33, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "21", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 136.79701, "t": 593.62131, "r": 394.7818, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 34, "end_row_offset_idx": 35, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.5 SELECT, INSERT, and UPDATE behavior with RCAC", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 400.32065, "t": 593.62131, "r": 547.1001, "b": 602.8343, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 33, "end_row_offset_idx": 34, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . 22", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 618.64082, "r": 530.49139, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.1 Assigning the QIBM_DB_SECADM function ID to the consultants. . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.04633, "t": 618.64082, "r": 547.15619, "b": 627.85382, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 35, "end_row_offset_idx": 36, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 631.1206999999999, "r": 530.56458, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.2 Creating group profiles for the users and their roles . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.09601, "t": 631.1206999999999, "r": 547.15875, "b": 640.3336899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 36, "end_row_offset_idx": 37, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "23", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 643.66034, "r": 530.55695, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.3 Demonstrating data access without RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.0882, "t": 643.66034, "r": 547.15076, "b": 652.87334, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 37, "end_row_offset_idx": 38, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "24", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 656.14021, "r": 530.53412, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.4 Defining and creating row permissions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.073, "t": 656.14021, "r": 547.15088, "b": 665.35321, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 38, "end_row_offset_idx": 39, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "25", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 668.62009, "r": 339.45105, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.5 Defining and creating column masks", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 344.98996, "t": 668.62009, "r": 547.16089, "b": 677.83309, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 39, "end_row_offset_idx": 40, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": ". . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 681.15973, "r": 530.54102, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.6 Activating RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.08765, "t": 681.15973, "r": 547.18085, "b": 690.37273, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 40, "end_row_offset_idx": 41, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "28", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 693.63961, "r": 530.57507, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.7 Demonstrating data access with RCAC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 536.10663, "t": 693.63961, "r": 547.16968, "b": 702.852615, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 41, "end_row_offset_idx": 42, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "29", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 151.19717, "t": 706.119492, "r": 530.43628, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "3.6.8 Demonstrating data access with a view and RCAC . . . . . . . . . . . . . . . . . . . . . . .", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 535.99847, "t": 706.119492, "r": 547.12286, "b": 715.332497, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 42, "end_row_offset_idx": 43, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "32", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 1, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.751060485839844, "t": 754.6969604492188, "r": 257.24335, "b": 764.1015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9473134875297546, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 1, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.3257446289062, "t": 754.0830688476562, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.892595112323761, "cells": [{"id": 1, "text": "iii", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25928, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "iii"}]}}, {"page_no": 2, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 0, "page_no": 2, "cluster": {"id": 0, "label": "text", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 0, "text": "DB2 for i Center of Excellence", "bbox": {"l": 64.800003, "t": 74.48395000000005, "r": 235.8624, "b": 85.58398, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 1, "page_no": 2, "cluster": {"id": 1, "label": "text", "bbox": {"l": 93.67039489746094, "t": 137.6368408203125, "r": 233.99973, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}, "confidence": 0.7431555986404419, "cells": [{"id": 1, "text": "Solution Brief", "bbox": {"l": 94.132698, "t": 148.63933999999995, "r": 139.54634, "b": 155.33642999999995, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "IBM Systems Lab Services and Training", "bbox": {"l": 94.134933, "t": 138.45012999999994, "r": 233.99973, "b": 145.22162000000003, "coord_origin": "TOPLEFT"}}]}, "text": "Solution Brief IBM Systems Lab Services and Training"}, {"label": "text", "id": 2, "page_no": 2, "cluster": {"id": 2, "label": "text", "bbox": {"l": 460.8193359375, "t": 138.33865356445312, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.7798991203308105, "cells": [{"id": 3, "text": "Power Services", "bbox": {"l": 461.08859000000007, "t": 138.40752999999995, "r": 506.26178, "b": 145.42181000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Power Services"}, {"label": "section_header", "id": 3, "page_no": 2, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 280.07391357421875, "t": 237.7128143310547, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}, "confidence": 0.7587877511978149, "cells": [{"id": 4, "text": "DB2 for i", "bbox": {"l": 280.24011, "t": 239.34265000000005, "r": 354.57022, "b": 256.26153999999997, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Center of Excellence ", "bbox": {"l": 280.24011, "t": 259.70165999999995, "r": 463.80942, "b": 276.62054, "coord_origin": "TOPLEFT"}}]}, "text": "DB2 for i Center of Excellence"}, {"label": "text", "id": 4, "page_no": 2, "cluster": {"id": 4, "label": "text", "bbox": {"l": 279.51953125, "t": 277.1574401855469, "r": 483.7276916503906, "b": 288.63494873046875, "coord_origin": "TOPLEFT"}, "confidence": 0.7965629696846008, "cells": [{"id": 6, "text": "Expert help to achieve your business requirements", "bbox": {"l": 280.24011, "t": 277.59027000000003, "r": 483.29572, "b": 287.45959, "coord_origin": "TOPLEFT"}}]}, "text": "Expert help to achieve your business requirements"}, {"label": "section_header", "id": 5, "page_no": 2, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 279.468994140625, "t": 315.0786437988281, "r": 443.375732421875, "b": 324.89566, "coord_origin": "TOPLEFT"}, "confidence": 0.891353964805603, "cells": [{"id": 7, "text": "We build confident, satisfied clients", "bbox": {"l": 280.24011, "t": 315.88161999999994, "r": 443.28210000000007, "b": 324.89566, "coord_origin": "TOPLEFT"}}]}, "text": "We build confident, satisfied clients"}, {"label": "text", "id": 6, "page_no": 2, "cluster": {"id": 6, "label": "text", "bbox": {"l": 279.530517578125, "t": 327.26470947265625, "r": 488.15466, "b": 345.5077209472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9560743570327759, "cells": [{"id": 8, "text": "No one else has the vast consulting experiences, skills sharing and ", "bbox": {"l": 280.24011, "t": 327.37595, "r": 488.15466, "b": 334.77994, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "renown service offerings to do what we can do for you.", "bbox": {"l": 280.24011, "t": 337.55551, "r": 452.34018, "b": 344.9595, "coord_origin": "TOPLEFT"}}]}, "text": "No one else has the vast consulting experiences, skills sharing and renown service offerings to do what we can do for you."}, {"label": "text", "id": 7, "page_no": 2, "cluster": {"id": 7, "label": "text", "bbox": {"l": 280.0453186035156, "t": 356.5709533691406, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}, "confidence": 0.8260757923126221, "cells": [{"id": 10, "text": "Because no one else is IBM.", "bbox": {"l": 280.24011, "t": 357.3260200000001, "r": 367.86023, "b": 364.73001, "coord_origin": "TOPLEFT"}}]}, "text": "Because no one else is IBM."}, {"label": "text", "id": 8, "page_no": 2, "cluster": {"id": 8, "label": "text", "bbox": {"l": 279.70794677734375, "t": 376.26104736328125, "r": 500.32104000000004, "b": 425.3092041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9764720797538757, "cells": [{"id": 11, "text": "With combined experiences and direct access to development groups, ", "bbox": {"l": 280.24011, "t": 377.09801999999996, "r": 500.32104000000004, "b": 384.50201, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of ", "bbox": {"l": 280.24011, "t": 387.27759, "r": 479.25497, "b": 394.68158, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Excellence (CoE) can help you achieve-perhaps reexamine and ", "bbox": {"l": 280.24011, "t": 397.45715, "r": 483.4667400000001, "b": 404.86115, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "exceed-your business requirements and gain more confidence and ", "bbox": {"l": 280.24011, "t": 407.63672, "r": 492.97656, "b": 415.04071000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "satisfaction in IBM product data management products and solutions.", "bbox": {"l": 280.24011, "t": 417.81628, "r": 498.87, "b": 425.22027999999995, "coord_origin": "TOPLEFT"}}]}, "text": "With combined experiences and direct access to development groups, we\u2019re the experts in IBM DB2\u00ae for i. The DB2 for i Center of Excellence (CoE) can help you achieve-perhaps reexamine and exceed-your business requirements and gain more confidence and satisfaction in IBM product data management products and solutions."}, {"label": "section_header", "id": 9, "page_no": 2, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 279.6336669921875, "t": 437.1227722167969, "r": 435.1236572265625, "b": 446.86807, "coord_origin": "TOPLEFT"}, "confidence": 0.8492124676704407, "cells": [{"id": 16, "text": "Who we are, some of what we do", "bbox": {"l": 280.24011, "t": 437.85403, "r": 434.83205999999996, "b": 446.86807, "coord_origin": "TOPLEFT"}}]}, "text": "Who we are, some of what we do"}, {"label": "text", "id": 10, "page_no": 2, "cluster": {"id": 10, "label": "text", "bbox": {"l": 279.4736328125, "t": 449.2602233886719, "r": 434.56316999999996, "b": 457.4661865234375, "coord_origin": "TOPLEFT"}, "confidence": 0.8440341353416443, "cells": [{"id": 17, "text": "Global CoE engagements cover topics including:", "bbox": {"l": 280.24011, "t": 449.34824000000003, "r": 434.56316999999996, "b": 456.75223, "coord_origin": "TOPLEFT"}}]}, "text": "Global CoE engagements cover topics including:"}, {"label": "list_item", "id": 11, "page_no": 2, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 279.74200439453125, "t": 468.3660583496094, "r": 402.1675109863281, "b": 476.5758972167969, "coord_origin": "TOPLEFT"}, "confidence": 0.9239599108695984, "cells": [{"id": 18, "text": "r ", "bbox": {"l": 280.24011, "t": 470.95236, "r": 284.0993, "b": 476.16074, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Database performance and scalability", "bbox": {"l": 287.28961, "t": 469.11826, "r": 401.56412, "b": 476.52225, "coord_origin": "TOPLEFT"}}]}, "text": "r Database performance and scalability"}, {"label": "list_item", "id": 12, "page_no": 2, "cluster": {"id": 12, "label": "list_item", "bbox": {"l": 279.7657165527344, "t": 478.64898681640625, "r": 424.99646, "b": 486.78228759765625, "coord_origin": "TOPLEFT"}, "confidence": 0.9239722490310669, "cells": [{"id": 20, "text": "r ", "bbox": {"l": 280.24011, "t": 481.13507, "r": 284.0993, "b": 486.34344, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Advanced SQL knowledge and skills transfer", "bbox": {"l": 287.28961, "t": 479.30096, "r": 424.99646, "b": 486.70496, "coord_origin": "TOPLEFT"}}]}, "text": "r Advanced SQL knowledge and skills transfer"}, {"label": "list_item", "id": 13, "page_no": 2, "cluster": {"id": 13, "label": "list_item", "bbox": {"l": 279.9660339355469, "t": 489.48355, "r": 392.2996520996094, "b": 497.1912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9157897233963013, "cells": [{"id": 22, "text": "r ", "bbox": {"l": 280.24011, "t": 491.31766, "r": 284.0993, "b": 496.52603, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Business intelligence and analytics", "bbox": {"l": 287.28961, "t": 489.48355, "r": 392.15845, "b": 496.88754, "coord_origin": "TOPLEFT"}}]}, "text": "r Business intelligence and analytics"}, {"label": "list_item", "id": 14, "page_no": 2, "cluster": {"id": 14, "label": "list_item", "bbox": {"l": 279.9432067871094, "t": 499.5702819824219, "r": 339.94354, "b": 507.2607727050781, "coord_origin": "TOPLEFT"}, "confidence": 0.8733457922935486, "cells": [{"id": 24, "text": "r ", "bbox": {"l": 280.24011, "t": 501.50037, "r": 284.0993, "b": 506.70874, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "DB2 Web Query", "bbox": {"l": 287.28961, "t": 499.66626, "r": 339.94354, "b": 507.07025, "coord_origin": "TOPLEFT"}}]}, "text": "r DB2 Web Query"}, {"label": "list_item", "id": 15, "page_no": 2, "cluster": {"id": 15, "label": "list_item", "bbox": {"l": 279.68328857421875, "t": 509.4296875, "r": 504.21795654296875, "b": 517.4979858398438, "coord_origin": "TOPLEFT"}, "confidence": 0.924924373626709, "cells": [{"id": 26, "text": "r ", "bbox": {"l": 280.24011, "t": 511.68295, "r": 284.0993, "b": 516.8913299999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Query/400 modernization for better reporting and analysis capabilities", "bbox": {"l": 287.28961, "t": 509.84885, "r": 504.19314999999995, "b": 517.25284, "coord_origin": "TOPLEFT"}}]}, "text": "r Query/400 modernization for better reporting and analysis capabilities"}, {"label": "list_item", "id": 16, "page_no": 2, "cluster": {"id": 16, "label": "list_item", "bbox": {"l": 279.66998291015625, "t": 520.03156, "r": 423.0022, "b": 528.0305786132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9109311103820801, "cells": [{"id": 28, "text": "r ", "bbox": {"l": 280.24011, "t": 521.8656599999999, "r": 284.0993, "b": 527.07404, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Database modernization and re-engineering", "bbox": {"l": 287.28961, "t": 520.03156, "r": 423.0022, "b": 527.4355499999999, "coord_origin": "TOPLEFT"}}]}, "text": "r Database modernization and re-engineering"}, {"label": "list_item", "id": 17, "page_no": 2, "cluster": {"id": 17, "label": "list_item", "bbox": {"l": 279.7203674316406, "t": 529.9635620117188, "r": 400.07391357421875, "b": 537.8783569335938, "coord_origin": "TOPLEFT"}, "confidence": 0.8977466225624084, "cells": [{"id": 30, "text": "r ", "bbox": {"l": 280.24011, "t": 532.04825, "r": 284.0993, "b": 537.2566400000001, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Data-centric architecture and design", "bbox": {"l": 287.28961, "t": 530.21414, "r": 399.65173, "b": 537.61813, "coord_origin": "TOPLEFT"}}]}, "text": "r Data-centric architecture and design"}, {"label": "list_item", "id": 18, "page_no": 2, "cluster": {"id": 18, "label": "list_item", "bbox": {"l": 279.7815856933594, "t": 539.8663330078125, "r": 467.2125549316406, "b": 547.80074, "coord_origin": "TOPLEFT"}, "confidence": 0.9218330383300781, "cells": [{"id": 32, "text": "r ", "bbox": {"l": 280.24011, "t": 542.23083, "r": 284.0993, "b": 547.43924, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "Extremely large database and overcoming limits to growth", "bbox": {"l": 287.28961, "t": 540.39674, "r": 466.77881, "b": 547.80074, "coord_origin": "TOPLEFT"}}]}, "text": "r Extremely large database and overcoming limits to growth"}, {"label": "list_item", "id": 19, "page_no": 2, "cluster": {"id": 19, "label": "list_item", "bbox": {"l": 279.89080810546875, "t": 550.0230102539062, "r": 382.3631591796875, "b": 557.98344, "coord_origin": "TOPLEFT"}, "confidence": 0.9075438976287842, "cells": [{"id": 34, "text": "r ", "bbox": {"l": 280.24011, "t": 552.41354, "r": 284.0993, "b": 557.62195, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "ISV education and enablement", "bbox": {"l": 287.28961, "t": 550.5794500000001, "r": 382.20956, "b": 557.98344, "coord_origin": "TOPLEFT"}}]}, "text": "r ISV education and enablement"}, {"label": "section_header", "id": 20, "page_no": 2, "cluster": {"id": 20, "label": "section_header", "bbox": {"l": 144.19781494140625, "t": 327.06201171875, "r": 188.74681, "b": 337.35504150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.9098501205444336, "cells": [{"id": 36, "text": "Highlights ", "bbox": {"l": 144.88921, "t": 327.46163999999993, "r": 188.74681, "b": 336.81406, "coord_origin": "TOPLEFT"}}]}, "text": "Highlights"}, {"label": "list_item", "id": 21, "page_no": 2, "cluster": {"id": 21, "label": "list_item", "bbox": {"l": 144.4553985595703, "t": 344.037109375, "r": 242.87389000000002, "b": 358.68942, "coord_origin": "TOPLEFT"}, "confidence": 0.9571698904037476, "cells": [{"id": 37, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 346.01953, "r": 148.68732, "b": 350.60168, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 345.21707, "r": 177.25424, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 176.9472, "t": 345.21707, "r": 187.11098, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 186.7914, "t": 345.21707, "r": 222.95989999999998, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.65912, "t": 345.21707, "r": 229.55193999999997, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "GLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 229.2261, "t": 345.21707, "r": 242.87389000000002, "b": 350.85666, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 353.04984, "r": 178.77066, "b": 358.68942, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 178.46362, "t": 353.04984, "r": 207.16908, "b": 358.68942, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 22, "page_no": 2, "cluster": {"id": 22, "label": "list_item", "bbox": {"l": 144.40879821777344, "t": 366.6461486816406, "r": 259.2287, "b": 389.2373, "coord_origin": "TOPLEFT"}, "confidence": 0.9634581804275513, "cells": [{"id": 45, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 368.73465, "r": 148.68732, "b": 373.3168, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "GLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 151.9388, "t": 367.93219, "r": 166.05655, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.73697, "t": 367.93219, "r": 186.40289, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH", "bbox": {"l": 186.09586, "t": 367.93219, "r": 203.61617, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 203.30286, "t": 367.93219, "r": 211.82489, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 211.49905, "t": 367.93219, "r": 218.16002, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 217.83418, "t": 367.93219, "r": 241.30737, "b": 373.57178, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 375.76495, "r": 174.46577, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 174.15874, "t": 375.76495, "r": 214.4128, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 214.11829, "t": 375.76495, "r": 221.01110999999997, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 220.68527, "t": 375.76495, "r": 247.52341000000004, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "GLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 247.21637, "t": 375.76495, "r": 259.2287, "b": 381.40454, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 383.59772, "r": 184.61703, "b": 389.2373, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 23, "page_no": 2, "cluster": {"id": 23, "label": "list_item", "bbox": {"l": 144.23313903808594, "t": 397.1644592285156, "r": 249.83562, "b": 412.3861083984375, "coord_origin": "TOPLEFT"}, "confidence": 0.9541196823120117, "cells": [{"id": 58, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 399.28265, "r": 148.68732, "b": 403.86481000000003, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "GLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.9388, "t": 398.48019, "r": 165.36099, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 165.04141, "t": 398.48019, "r": 173.56345, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.23761, "t": 398.48019, "r": 185.95174, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 185.63216, "t": 398.48019, "r": 204.42448, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 204.11118, "t": 398.48019, "r": 235.29178, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH", "bbox": {"l": 234.99099999999999, "t": 398.48019, "r": 249.83562, "b": 404.11978, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.93253, "t": 406.31296, "r": 173.41306, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 173.10602, "t": 406.31296, "r": 185.0118, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 184.69221, "t": 406.31296, "r": 206.3858, "b": 411.95255, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 206.07249, "t": 406.31296, "r": 228.24231000000003, "b": 411.95255, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "list_item", "id": 24, "page_no": 2, "cluster": {"id": 24, "label": "list_item", "bbox": {"l": 144.35208129882812, "t": 420.17449951171875, "r": 234.25163000000003, "b": 434.66763, "coord_origin": "TOPLEFT"}, "confidence": 0.9440370798110962, "cells": [{"id": 69, "text": "GLYPHGLYPH", "bbox": {"l": 144.88921, "t": 421.99773999999996, "r": 148.68732, "b": 426.5799, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 151.9388, "t": 421.1952800000001, "r": 155.43533, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 154.73979, "t": 421.1952800000001, "r": 166.06282, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 165.74324, "t": 421.1952800000001, "r": 195.84607, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 195.53903, "t": 421.1952800000001, "r": 202.43185, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 202.10602, "t": 421.1952800000001, "r": 222.87220999999997, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 222.55890000000002, "t": 421.1952800000001, "r": 229.57077, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "GLYPH GLYPH", "bbox": {"l": 229.24492999999998, "t": 421.1952800000001, "r": 234.25163000000003, "b": 426.83487, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 151.92627, "t": 429.02805, "r": 181.42754, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 181.1205, "t": 429.02805, "r": 201.07835, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 79, "text": "GLYPHGLYPHGLYPH", "bbox": {"l": 200.76505, "t": 429.02805, "r": 207.65787, "b": 434.66763, "coord_origin": "TOPLEFT"}}, {"id": 80, "text": "GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH", "bbox": {"l": 207.33203, "t": 429.02805, "r": 232.07098000000002, "b": 434.66763, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPHGLYPH GLYPH GLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPH GLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH GLYPHGLYPHGLYPH GLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPHGLYPH"}, {"label": "picture", "id": 25, "page_no": 2, "cluster": {"id": 25, "label": "picture", "bbox": {"l": 64.16704559326172, "t": 603.50634765625, "r": 258.77435302734375, "b": 688.1282348632812, "coord_origin": "TOPLEFT"}, "confidence": 0.8925828337669373, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 26, "page_no": 2, "cluster": {"id": 26, "label": "picture", "bbox": {"l": 143.39866638183594, "t": 270.2610778808594, "r": 179.56256103515625, "b": 285.621337890625, "coord_origin": "TOPLEFT"}, "confidence": 0.7491760849952698, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": []}}, {"page_no": 3, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}, {"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "section_header", "id": 2, "page_no": 3, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.800003, "t": 73.10313415527344, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.9174708724021912, "cells": [{"id": 2, "text": "Preface", "bbox": {"l": 64.800003, "t": 73.84802000000002, "r": 151.46161, "b": 96.04803000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Preface"}, {"label": "text", "id": 3, "page_no": 3, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.75503540039062, "t": 131.914306640625, "r": 547.30823, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}, "confidence": 0.9869155883789062, "cells": [{"id": 3, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM ", "bbox": {"l": 136.8, "t": 132.64862000000005, "r": 542.91888, "b": 141.86163, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the ", "bbox": {"l": 136.79984, "t": 144.64844000000005, "r": 526.65509, "b": 153.86145, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "function and advantages of controlling access to data in a comprehensive and transparent ", "bbox": {"l": 136.79984, "t": 156.64824999999996, "r": 536.82135, "b": 165.86127, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "way. This publication helps you understand the capabilities of RCAC and provides examples ", "bbox": {"l": 136.79987, "t": 168.64806999999996, "r": 544.67975, "b": 177.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "of defining, creating, and implementing the row permissions and column masks in a relational ", "bbox": {"l": 136.79987, "t": 180.64788999999996, "r": 547.30823, "b": 189.86090000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "database environment.", "bbox": {"l": 136.79987, "t": 192.64770999999996, "r": 238.32117, "b": 201.86072000000001, "coord_origin": "TOPLEFT"}}]}, "text": "This IBMfi Redpaper\u2122 publication provides information about the IBM i 7.2 feature of IBM DB2fi for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 4, "page_no": 3, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.94647216796875, "t": 214.0637664794922, "r": 546.4657, "b": 260.1856384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.987220287322998, "cells": [{"id": 9, "text": "This paper is intended for database engineers, data-centric application developers, and ", "bbox": {"l": 136.79987, "t": 214.60748, "r": 524.18518, "b": 223.82050000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security officers who want to design and implement RCAC as a part of their data control and ", "bbox": {"l": 136.79987, "t": 226.6073, "r": 546.4657, "b": 235.82030999999995, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "governance policy. A solid background in IBM i object level security, DB2 for i relational ", "bbox": {"l": 136.79987, "t": 238.60712, "r": 521.25488, "b": 247.82012999999995, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "database concepts, and SQL is assumed.", "bbox": {"l": 136.79987, "t": 250.60693000000003, "r": 321.69434, "b": 259.81994999999995, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "section_header", "id": 5, "page_no": 3, "cluster": {"id": 5, "label": "section_header", "bbox": {"l": 64.22550201416016, "t": 287.1894226074219, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}, "confidence": 0.9255504608154297, "cells": [{"id": 13, "text": "Authors", "bbox": {"l": 64.800003, "t": 288.3006, "r": 125.36661, "b": 303.0636, "coord_origin": "TOPLEFT"}}]}, "text": "Authors"}, {"label": "text", "id": 6, "page_no": 3, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.71319580078125, "t": 319.8118591308594, "r": 547.23669, "b": 342.1517028808594, "coord_origin": "TOPLEFT"}, "confidence": 0.9713318347930908, "cells": [{"id": 14, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with ", "bbox": {"l": 136.8, "t": 320.62871999999993, "r": 547.23669, "b": 329.8417099999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "the International Technical Support Organization (ITSO), Rochester, Minnesota US.", "bbox": {"l": 136.8, "t": 332.62854, "r": 505.05518, "b": 341.84152, "coord_origin": "TOPLEFT"}}]}, "text": "This paper was produced by the IBM DB2 for i Center of Excellence team in partnership with the International Technical Support Organization (ITSO), Rochester, Minnesota US."}, {"label": "text", "id": 7, "page_no": 3, "cluster": {"id": 7, "label": "text", "bbox": {"l": 262.6522521972656, "t": 374.687255859375, "r": 541.25079, "b": 516.9314575195312, "coord_origin": "TOPLEFT"}, "confidence": 0.9842760562896729, "cells": [{"id": 16, "text": "Jim Bainbridge", "bbox": {"l": 263.39957, "t": 375.64877, "r": 335.7251, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " is a senior DB2 consultant on the DB2 for i ", "bbox": {"l": 335.69922, "t": 375.64877, "r": 529.34259, "b": 384.86176, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "Center of Excellence team in the IBM Lab Services and ", "bbox": {"l": 263.3996, "t": 387.64859, "r": 511.50717, "b": 396.86157, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Training organization. His primary role is training and ", "bbox": {"l": 263.3996, "t": 399.64841, "r": 499.077, "b": 408.86139, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "implementation services for IBM DB2 Web Query for i and ", "bbox": {"l": 263.3996, "t": 411.64822, "r": 522.51996, "b": 420.86121, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "business analytics. Jim began his career with IBM 30 years ago ", "bbox": {"l": 263.3996, "t": 423.64804, "r": 541.25079, "b": 432.86102, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "in the IBM Rochester Development Lab, where he developed ", "bbox": {"l": 263.3996, "t": 435.64786, "r": 534.71411, "b": 444.86084, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "cooperative processing products that paired IBM PCs with IBM ", "bbox": {"l": 263.3996, "t": 447.64767, "r": 541.22375, "b": 456.86066, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "S/36 and AS/.400 systems. In the years since, Jim has held ", "bbox": {"l": 263.3996, "t": 459.64749, "r": 528.91016, "b": 468.86047, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "numerous technical roles, including independent software ", "bbox": {"l": 263.3996, "t": 471.64731, "r": 520.24207, "b": 480.86029, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "vendors technical support on a broad range of IBM ", "bbox": {"l": 263.3996, "t": 483.64713, "r": 490.6967200000001, "b": 492.86011, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "technologies and products, and supporting customers in the ", "bbox": {"l": 263.3996, "t": 495.64694, "r": 530.95514, "b": 504.85992, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "IBM Executive Briefing Center and IBM Project Office.", "bbox": {"l": 263.3996, "t": 507.64676, "r": 501.62973, "b": 516.85974, "coord_origin": "TOPLEFT"}}]}, "text": "Jim Bainbridge is a senior DB2 consultant on the DB2 for i Center of Excellence team in the IBM Lab Services and Training organization. His primary role is training and implementation services for IBM DB2 Web Query for i and business analytics. Jim began his career with IBM 30 years ago in the IBM Rochester Development Lab, where he developed cooperative processing products that paired IBM PCs with IBM S/36 and AS/.400 systems. In the years since, Jim has held numerous technical roles, including independent software vendors technical support on a broad range of IBM technologies and products, and supporting customers in the IBM Executive Briefing Center and IBM Project Office."}, {"label": "text", "id": 8, "page_no": 3, "cluster": {"id": 8, "label": "text", "bbox": {"l": 262.4736328125, "t": 526.50830078125, "r": 541.27374, "b": 680.83716, "coord_origin": "TOPLEFT"}, "confidence": 0.9823779463768005, "cells": [{"id": 29, "text": "Hernando Bedoya", "bbox": {"l": 263.3996, "t": 527.62653, "r": 348.38229, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": " is a Senior IT Specialist at STG Lab ", "bbox": {"l": 348.41916, "t": 527.62653, "r": 512.3429, "b": 536.83952, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Services and Training in Rochester, Minnesota. He writes ", "bbox": {"l": 263.3996, "t": 539.62633, "r": 519.26306, "b": 548.83932, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "extensively and teaches IBM classes worldwide in all areas of ", "bbox": {"l": 263.3996, "t": 551.62613, "r": 538.40308, "b": 560.8391300000001, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "DB2 for i. Before joining STG Lab Services, he worked in the ", "bbox": {"l": 263.3996, "t": 563.62593, "r": 533.95715, "b": 572.83893, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ITSO for nine years writing multiple IBM Redbooksfi ", "bbox": {"l": 263.3996, "t": 575.62573, "r": 496.94464, "b": 584.8387299999999, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "publications. He also worked for IBM Colombia as an IBM ", "bbox": {"l": 263.3996, "t": 587.62553, "r": 520.38562, "b": 596.83853, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "AS/400fi IT Specialist doing presales support for the Andean ", "bbox": {"l": 263.3996, "t": 599.62534, "r": 535.99078, "b": 608.83833, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "countries. He has 28 years of experience in the computing field ", "bbox": {"l": 263.3996, "t": 611.62514, "r": 541.27374, "b": 620.83813, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "and has taught database classes in Colombian universities. He ", "bbox": {"l": 263.3996, "t": 623.62494, "r": 541.26465, "b": 632.83794, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "holds a Master\u2019s degree in Computer Science from EAFIT, ", "bbox": {"l": 263.3996, "t": 635.62474, "r": 523.22211, "b": 644.8377399999999, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Colombia. His areas of expertise are database technology, ", "bbox": {"l": 263.3996, "t": 647.62454, "r": 524.77386, "b": 656.83754, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "performance, and data warehousing. Hernando can be ", "bbox": {"l": 263.3996, "t": 659.62434, "r": 508.27124, "b": 668.83735, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "contacted at ", "bbox": {"l": 263.3996, "t": 671.62415, "r": 320.63568, "b": 680.83716, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "hbedoya@us.ibm.com", "bbox": {"l": 320.63971, "t": 671.77356, "r": 410.57852, "b": 680.54832, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": ".", "bbox": {"l": 410.5795, "t": 671.62415, "r": 413.34839, "b": 680.83716, "coord_origin": "TOPLEFT"}}]}, "text": "Hernando Bedoya is a Senior IT Specialist at STG Lab Services and Training in Rochester, Minnesota. He writes extensively and teaches IBM classes worldwide in all areas of DB2 for i. Before joining STG Lab Services, he worked in the ITSO for nine years writing multiple IBM Redbooksfi publications. He also worked for IBM Colombia as an IBM AS/400fi IT Specialist doing presales support for the Andean countries. He has 28 years of experience in the computing field and has taught database classes in Colombian universities. He holds a Master\u2019s degree in Computer Science from EAFIT, Colombia. His areas of expertise are database technology, performance, and data warehousing. Hernando can be contacted at hbedoya@us.ibm.com ."}, {"label": "picture", "id": 9, "page_no": 3, "cluster": {"id": 9, "label": "picture", "bbox": {"l": 145.41448974609375, "t": 527.2447509765625, "r": 252.08840942382812, "b": 635.383056640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9871657490730286, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 10, "page_no": 3, "cluster": {"id": 10, "label": "picture", "bbox": {"l": 142.52883911132812, "t": 375.0449523925781, "r": 251.47850036621094, "b": 503.20648193359375, "coord_origin": "TOPLEFT"}, "confidence": 0.9862572550773621, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 3, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.724002838134766, "t": 754.7037963867188, "r": 257.24335, "b": 764.1082153320312, "coord_origin": "TOPLEFT"}, "confidence": 0.9469243884086609, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 3, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 538.058349609375, "t": 754.3980102539062, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9040942788124084, "cells": [{"id": 1, "text": "xi", "bbox": {"l": 538.85999, "t": 754.848721, "r": 547.25031, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "xi"}]}}, {"page_no": 4, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 4, "cluster": {"id": 2, "label": "text", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "Chapter 1.", "bbox": {"l": 81.0, "t": 268.54272000000003, "r": 115.13253, "b": 274.98071000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 1."}, {"label": "section_header", "id": 3, "page_no": 4, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 136.68006896972656, "t": 253.28985595703125, "r": 547.30475, "b": 309.8782, "coord_origin": "TOPLEFT"}, "confidence": 0.9377049207687378, "cells": [{"id": 3, "text": "Securing and protecting IBM DB2 ", "bbox": {"l": 136.8, "t": 254.88635, "r": 547.30475, "b": 278.91785000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "data", "bbox": {"l": 136.8, "t": 285.84671, "r": 190.29802, "b": 309.8782, "coord_origin": "TOPLEFT"}}]}, "text": "Securing and protecting IBM DB2 data"}, {"label": "text", "id": 4, "page_no": 4, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.15219116210938, "t": 347.975341796875, "r": 547.25403, "b": 430.37359619140625, "coord_origin": "TOPLEFT"}, "confidence": 0.9868757724761963, "cells": [{"id": 5, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting ", "bbox": {"l": 136.8, "t": 348.70871, "r": 542.25665, "b": 357.92169, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 ", "bbox": {"l": 136.80096, "t": 360.70853, "r": 544.96643, "b": 369.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "data breaches have occurred since 2005, exposing over 600 million records of data. The ", "bbox": {"l": 136.79965, "t": 372.70853, "r": 529.53839, "b": 381.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ ", "bbox": {"l": 136.79965, "t": 384.7083400000001, "r": 535.32874, "b": 393.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "revealed that the average cost of a data breach increased in 2013 by 15% globally and ", "bbox": {"l": 136.80026, "t": 396.70853, "r": 521.64374, "b": 405.92150999999996, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for ", "bbox": {"l": 136.80026, "t": 408.7083400000001, "r": 547.13135, "b": 417.92133000000007, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "each lost record containing sensitive information increased more than 9% to $145 per record. ", "bbox": {"l": 136.80023, "t": 420.70816, "r": 547.25403, "b": 429.92114, "coord_origin": "TOPLEFT"}}]}, "text": "Recent news headlines are filled with reports of data breaches and cyber-attacks impacting global businesses of all sizes. The Identity Theft Resource Center$^{1}$ reports that almost 5000 data breaches have occurred since 2005, exposing over 600 million records of data. The financial cost of these data breaches is skyrocketing. Studies from the Ponemon Institute$^{2}$ revealed that the average cost of a data breach increased in 2013 by 15% globally and resulted in a brand equity loss of $9.4 million per attack. The average cost that is incurred for each lost record containing sensitive information increased more than 9% to $145 per record."}, {"label": "text", "id": 5, "page_no": 4, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.05917358398438, "t": 442.1153564453125, "r": 527.2063, "b": 488.44146728515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9865864515304565, "cells": [{"id": 12, "text": "Businesses must make a serious effort to secure their data and recognize that securing ", "bbox": {"l": 136.80023, "t": 442.7277199999999, "r": 525.06482, "b": 451.9407, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "information assets is a cost of doing business. In many parts of the world and in many ", "bbox": {"l": 136.80025, "t": 454.72754000000003, "r": 518.26825, "b": 463.94052, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "industries, securing the data is required by law and subject to audits. Data security is no ", "bbox": {"l": 136.80025, "t": 466.72736, "r": 527.2063, "b": 475.94034, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "longer an option; it is a requirement.", "bbox": {"l": 136.80025, "t": 478.72717, "r": 296.31067, "b": 487.94016, "coord_origin": "TOPLEFT"}}]}, "text": "Businesses must make a serious effort to secure their data and recognize that securing information assets is a cost of doing business. In many parts of the world and in many industries, securing the data is required by law and subject to audits. Data security is no longer an option; it is a requirement."}, {"label": "text", "id": 6, "page_no": 4, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.5961456298828, "t": 500.0403137207031, "r": 547.15515, "b": 521.89978, "coord_origin": "TOPLEFT"}, "confidence": 0.9734498858451843, "cells": [{"id": 16, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics ", "bbox": {"l": 136.80025, "t": 500.68698, "r": 547.15515, "b": 509.89996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "are covered in this chapter:", "bbox": {"l": 136.80025, "t": 512.6868, "r": 257.28036, "b": 521.89978, "coord_origin": "TOPLEFT"}}]}, "text": "This chapter describes how you can secure and protect data in DB2 for i. The following topics are covered in this chapter:"}, {"label": "list_item", "id": 7, "page_no": 4, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.86915588378906, "t": 528.70361328125, "r": 250.23166999999998, "b": 539.0433349609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9374465346336365, "cells": [{"id": 18, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 529.87576, "r": 141.78024, "b": 538.6505099999999, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "Security fundamentals", "bbox": {"l": 151.20041, "t": 529.72635, "r": 250.23166999999998, "b": 538.93936, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Security fundamentals"}, {"label": "list_item", "id": 8, "page_no": 4, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.742431640625, "t": 540.7142333984375, "r": 282.98114, "b": 551.373291015625, "coord_origin": "TOPLEFT"}, "confidence": 0.933772087097168, "cells": [{"id": 20, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 541.87556, "r": 141.78024, "b": 550.65031, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Current state of IBM i security", "bbox": {"l": 151.20041, "t": 541.72617, "r": 282.98114, "b": 550.93916, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Current state of IBM i security"}, {"label": "list_item", "id": 9, "page_no": 4, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.86570739746094, "t": 552.4489135742188, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}, "confidence": 0.946319043636322, "cells": [{"id": 22, "text": "GLYPH", "bbox": {"l": 136.80025, "t": 553.87537, "r": 141.78024, "b": 562.65012, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "DB2 for i security controls", "bbox": {"l": 151.20041, "t": 553.72597, "r": 264.88187, "b": 562.93896, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH DB2 for i security controls"}, {"label": "text", "id": 10, "page_no": 4, "cluster": {"id": 10, "label": "text", "bbox": {"l": 500.39999, "t": 92.66075897216797, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}, "confidence": 0.7054197788238525, "cells": [{"id": 24, "text": "1", "bbox": {"l": 500.39999, "t": 93.16870000000006, "r": 522.61774, "b": 130.13171, "coord_origin": "TOPLEFT"}}]}, "text": "1"}, {"label": "footnote", "id": 11, "page_no": 4, "cluster": {"id": 11, "label": "footnote", "bbox": {"l": 135.7418975830078, "t": 716.2816772460938, "r": 258.36255, "b": 725.5408325195312, "coord_origin": "TOPLEFT"}, "confidence": 0.7673327326774597, "cells": [{"id": 25, "text": "$^{1 }$http://www.idtheftcenter.org", "bbox": {"l": 136.8, "t": 717.750061, "r": 258.36255, "b": 724.780441, "coord_origin": "TOPLEFT"}}]}, "text": "$^{1 }$http://www.idtheftcenter.org"}, {"label": "footnote", "id": 12, "page_no": 4, "cluster": {"id": 12, "label": "footnote", "bbox": {"l": 136.19522094726562, "t": 725.296142578125, "r": 234.42526245117188, "b": 735.2681274414062, "coord_origin": "TOPLEFT"}, "confidence": 0.7980051636695862, "cells": [{"id": 26, "text": "$^{2 }$http://www.ponemon.org", "bbox": {"l": 136.8, "t": 727.709961, "r": 231.90257, "b": 734.740341, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "/", "bbox": {"l": 231.84036, "t": 727.590263, "r": 234.05881, "b": 734.97176, "coord_origin": "TOPLEFT"}}]}, "text": "$^{2 }$http://www.ponemon.org /"}, {"label": "picture", "id": 13, "page_no": 4, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 32.05508804321289, "t": 70.42637634277344, "r": 239.62692260742188, "b": 238.041015625, "coord_origin": "TOPLEFT"}, "confidence": 0.7604197263717651, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 4, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.68400573730469, "t": 754.6591796875, "r": 257.24335, "b": 764.1430053710938, "coord_origin": "TOPLEFT"}, "confidence": 0.9370514154434204, "cells": [{"id": 0, "text": "' Copyright IBM Corp. 2014. All rights reserved.", "bbox": {"l": 64.800003, "t": 755.538002, "r": 257.24335, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "' Copyright IBM Corp. 2014. All rights reserved."}, {"label": "page_footer", "id": 1, "page_no": 4, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 541.2396240234375, "t": 754.2869873046875, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8513588309288025, "cells": [{"id": 1, "text": "1", "bbox": {"l": 541.67987, "t": 754.848721, "r": 547.21765, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "1"}]}}, {"page_no": 5, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "body": [{"label": "section_header", "id": 2, "page_no": 5, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.33735656738281, "t": 73.39700317382812, "r": 267.40582, "b": 89.61579895019531, "coord_origin": "TOPLEFT"}, "confidence": 0.9651358127593994, "cells": [{"id": 2, "text": "1.1", "bbox": {"l": 64.800003, "t": 74.34069999999997, "r": 87.524292, "b": 89.1037, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Security fundamentals", "bbox": {"l": 92.069145, "t": 74.34069999999997, "r": 267.40582, "b": 89.1037, "coord_origin": "TOPLEFT"}}]}, "text": "1.1 Security fundamentals"}, {"label": "text", "id": 3, "page_no": 5, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.23556518554688, "t": 106.02731323242188, "r": 545.00482, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9663435220718384, "cells": [{"id": 4, "text": "Before reviewing database security techniques, there are two fundamental steps in securing ", "bbox": {"l": 136.8, "t": 106.6087, "r": 545.00482, "b": 115.82172000000003, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "information assets that must be described:", "bbox": {"l": 136.8, "t": 118.60852, "r": 324.47229, "b": 127.82153000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Before reviewing database security techniques, there are two fundamental steps in securing information assets that must be described:"}, {"label": "list_item", "id": 4, "page_no": 5, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.66490173339844, "t": 134.66909790039062, "r": 547.16425, "b": 181.15467834472656, "coord_origin": "TOPLEFT"}, "confidence": 0.9835494756698608, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 135.79749000000004, "r": 141.78, "b": 144.57227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "First, and most important, is the definition of a company\u2019s ", "bbox": {"l": 151.20016, "t": 135.64806999999996, "r": 406.67715, "b": 144.86108000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "security policy", "bbox": {"l": 406.67999, "t": 135.12487999999996, "r": 471.03815, "b": 145.18262000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": ". Without a ", "bbox": {"l": 470.04001000000005, "t": 135.64862000000005, "r": 520.59796, "b": 144.86163, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "security policy, there is no definition of what are acceptable practices for using, accessing, ", "bbox": {"l": 151.19949, "t": 147.64844000000005, "r": 547.16425, "b": 156.86145, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "and storing information by who, what, when, where, and how. A security policy should ", "bbox": {"l": 151.19948, "t": 159.64824999999996, "r": 531.02008, "b": 168.86127, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "minimally address three things: confidentiality, integrity, and availability.", "bbox": {"l": 151.19948, "t": 171.64806999999996, "r": 463.3578499999999, "b": 180.86108000000002, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH First, and most important, is the definition of a company\u2019s security policy . Without a security policy, there is no definition of what are acceptable practices for using, accessing, and storing information by who, what, when, where, and how. A security policy should minimally address three things: confidentiality, integrity, and availability."}, {"label": "list_item", "id": 5, "page_no": 5, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 150.2132110595703, "t": 187.9793701171875, "r": 547.26086, "b": 270.5374450683594, "coord_origin": "TOPLEFT"}, "confidence": 0.8077321648597717, "cells": [{"id": 13, "text": "The monitoring and assessment of adherence to the security policy determines whether ", "bbox": {"l": 151.19948, "t": 188.62787000000003, "r": 541.70514, "b": 197.84087999999997, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "your security strategy is working. Often, IBM security consultants are asked to perform ", "bbox": {"l": 151.19948, "t": 200.62769000000003, "r": 534.83002, "b": 209.84069999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "security assessments for companies without regard to the security policy. Although these ", "bbox": {"l": 151.19948, "t": 212.62750000000005, "r": 545.79773, "b": 221.84051999999997, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "assessments can be useful for observing how the system is defined and how data is being ", "bbox": {"l": 151.19948, "t": 224.62732000000005, "r": 547.26086, "b": 233.84033, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "accessed, they cannot determine the level of security without a security policy. Without a ", "bbox": {"l": 151.19948, "t": 236.62714000000005, "r": 543.91528, "b": 245.84015, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "security policy, it really is not an assessment as much as it is a baseline for monitoring the ", "bbox": {"l": 151.19948, "t": 248.62694999999997, "r": 547.25989, "b": 257.83997, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "changes in the security settings that are captured.", "bbox": {"l": 151.19946, "t": 260.62676999999996, "r": 371.8692, "b": 269.83978, "coord_origin": "TOPLEFT"}}]}, "text": "The monitoring and assessment of adherence to the security policy determines whether your security strategy is working. Often, IBM security consultants are asked to perform security assessments for companies without regard to the security policy. Although these assessments can be useful for observing how the system is defined and how data is being accessed, they cannot determine the level of security without a security policy. Without a security policy, it really is not an assessment as much as it is a baseline for monitoring the changes in the security settings that are captured."}, {"label": "text", "id": 6, "page_no": 5, "cluster": {"id": 6, "label": "text", "bbox": {"l": 150.1995086669922, "t": 276.76263427734375, "r": 541.992, "b": 287.0709533691406, "coord_origin": "TOPLEFT"}, "confidence": 0.7967227697372437, "cells": [{"id": 20, "text": "A security policy is what defines whether the system and its settings are secure (or not). ", "bbox": {"l": 151.19946, "t": 277.60657000000003, "r": 541.992, "b": 286.81958, "coord_origin": "TOPLEFT"}}]}, "text": "A security policy is what defines whether the system and its settings are secure (or not)."}, {"label": "list_item", "id": 7, "page_no": 5, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.4777374267578, "t": 293.81439208984375, "r": 547.15826, "b": 376.5453796386719, "coord_origin": "TOPLEFT"}, "confidence": 0.9837487936019897, "cells": [{"id": 21, "text": "GLYPH", "bbox": {"l": 136.7993, "t": 294.7955600000001, "r": 141.7793, "b": 303.57034, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "The second fundamental in securing data assets is the use of ", "bbox": {"l": 151.19946, "t": 294.64618, "r": 425.86029, "b": 303.85916, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "resource security", "bbox": {"l": 425.82001, "t": 294.12496999999996, "r": 501.60065, "b": 304.18265, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": ". If ", "bbox": {"l": 500.64001, "t": 294.64871, "r": 514.49933, "b": 303.86169, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "implemented properly, resource security prevents data breaches from both internal and ", "bbox": {"l": 151.20038, "t": 306.64853, "r": 537.87421, "b": 315.86151, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "external intrusions. Resource security controls are closely tied to the part of the security ", "bbox": {"l": 151.20038, "t": 318.64834999999994, "r": 541.33636, "b": 327.86133, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "policy that defines who should have access to what information resources. A hacker might ", "bbox": {"l": 151.20038, "t": 330.64816, "r": 547.15826, "b": 339.86115, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be good enough to get through your company firewalls and sift his way through to your ", "bbox": {"l": 151.20038, "t": 342.64798, "r": 534.86066, "b": 351.86096, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "system, but if they do not have explicit access to your database, the hacker cannot ", "bbox": {"l": 151.20038, "t": 354.6478, "r": 517.00739, "b": 363.86078, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "compromise your information assets.", "bbox": {"l": 151.20038, "t": 366.64761, "r": 314.03534, "b": 375.8606, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH The second fundamental in securing data assets is the use of resource security . If implemented properly, resource security prevents data breaches from both internal and external intrusions. Resource security controls are closely tied to the part of the security policy that defines who should have access to what information resources. A hacker might be good enough to get through your company firewalls and sift his way through to your system, but if they do not have explicit access to your database, the hacker cannot compromise your information assets."}, {"label": "text", "id": 8, "page_no": 5, "cluster": {"id": 8, "label": "text", "bbox": {"l": 135.90879821777344, "t": 388.12286376953125, "r": 535.36169, "b": 410.3081359863281, "coord_origin": "TOPLEFT"}, "confidence": 0.9622000455856323, "cells": [{"id": 31, "text": "With your eyes now open to the importance of securing information assets, the rest of this ", "bbox": {"l": 136.80022, "t": 388.60742, "r": 535.36169, "b": 397.82040000000006, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "chapter reviews the methods that are available for securing database resources on IBM i. ", "bbox": {"l": 136.80022, "t": 400.60724, "r": 532.755, "b": 409.82022, "coord_origin": "TOPLEFT"}}]}, "text": "With your eyes now open to the importance of securing information assets, the rest of this chapter reviews the methods that are available for securing database resources on IBM i."}, {"label": "section_header", "id": 9, "page_no": 5, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 64.44733428955078, "t": 437.4118957519531, "r": 323.38391, "b": 453.6912841796875, "coord_origin": "TOPLEFT"}, "confidence": 0.9650285243988037, "cells": [{"id": 33, "text": "1.2", "bbox": {"l": 64.800003, "t": 438.30072, "r": 87.415726, "b": 453.06372, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Current state of IBM i security", "bbox": {"l": 91.93885, "t": 438.30072, "r": 323.38391, "b": 453.06372, "coord_origin": "TOPLEFT"}}]}, "text": "1.2 Current state of IBM i security"}, {"label": "text", "id": 10, "page_no": 5, "cluster": {"id": 10, "label": "text", "bbox": {"l": 136.1368408203125, "t": 469.76971435546875, "r": 547.31824, "b": 516.47802734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9848750233650208, "cells": [{"id": 35, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system ", "bbox": {"l": 136.8, "t": 470.62872, "r": 530.30463, "b": 479.84171, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "settings to protect their business data that is stored in DB2 for i. In most cases, this means no ", "bbox": {"l": 136.8, "t": 482.62854, "r": 547.31824, "b": 491.84152, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "data protection because the default setting for the Create default public authority (QCRTAUT) ", "bbox": {"l": 136.8, "t": 494.62836, "r": 547.19586, "b": 503.84134, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "system value is *CHANGE.", "bbox": {"l": 136.8, "t": 506.62817, "r": 257.04709, "b": 515.84116, "coord_origin": "TOPLEFT"}}]}, "text": "Because of the inherently secure nature of IBM i, many clients rely on the default system settings to protect their business data that is stored in DB2 for i. In most cases, this means no data protection because the default setting for the Create default public authority (QCRTAUT) system value is *CHANGE."}, {"label": "text", "id": 11, "page_no": 5, "cluster": {"id": 11, "label": "text", "bbox": {"l": 135.79974365234375, "t": 527.8772583007812, "r": 547.28442, "b": 585.85994, "coord_origin": "TOPLEFT"}, "confidence": 0.9848474860191345, "cells": [{"id": 39, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news ", "bbox": {"l": 136.8, "t": 528.64774, "r": 513.90448, "b": 537.86073, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "headlines and the significant costs that are involved with databases being compromised. This ", "bbox": {"l": 136.8, "t": 540.6475399999999, "r": 547.28442, "b": 549.86053, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "default security configuration makes it quite challenging to implement basic security policies. ", "bbox": {"l": 136.8, "t": 552.64734, "r": 546.27533, "b": 561.86034, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "A tighter implementation is required if you really want to protect one of your company\u2019s most ", "bbox": {"l": 136.8, "t": 564.64714, "r": 545.08014, "b": 573.86014, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "valuable assets, which is the data.", "bbox": {"l": 136.8, "t": 576.64694, "r": 287.80057, "b": 585.85994, "coord_origin": "TOPLEFT"}}]}, "text": "Even more disturbing is that many IBM i clients remain in this state, despite the news headlines and the significant costs that are involved with databases being compromised. This default security configuration makes it quite challenging to implement basic security policies. A tighter implementation is required if you really want to protect one of your company\u2019s most valuable assets, which is the data."}, {"label": "text", "id": 12, "page_no": 5, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.8997802734375, "t": 598.1246337890625, "r": 547.28326, "b": 680.4212036132812, "coord_origin": "TOPLEFT"}, "confidence": 0.9870820045471191, "cells": [{"id": 44, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default ", "bbox": {"l": 136.8, "t": 598.6665, "r": 547.28326, "b": 607.8795, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "configuration that gives all users access to the data. The theory is that data is protected by ", "bbox": {"l": 136.8, "t": 610.6663100000001, "r": 538.6767, "b": 619.8793000000001, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "the menu options controlling what database operations that the user can perform. This ", "bbox": {"l": 136.8, "t": 622.66611, "r": 520.35364, "b": 631.8791, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "approach is ineffective, even if the user profile is restricted from running interactive ", "bbox": {"l": 136.80002, "t": 634.6659099999999, "r": 502.77115000000003, "b": 643.87891, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "commands. The reason is that in today\u2019s connected world there are a multitude of interfaces ", "bbox": {"l": 136.80002, "t": 646.66571, "r": 545.16492, "b": 655.87871, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "into the system, from web browsers to PC clients, that bypass application menus. If there are ", "bbox": {"l": 136.80002, "t": 658.66551, "r": 547.23376, "b": 667.87852, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "no object-level controls, users of these newer interfaces have an open door to your data.", "bbox": {"l": 136.80002, "t": 670.66532, "r": 526.04187, "b": 679.87833, "coord_origin": "TOPLEFT"}}]}, "text": "Traditionally, IBM i applications have employed menu-based security to counteract this default configuration that gives all users access to the data. The theory is that data is protected by the menu options controlling what database operations that the user can perform. This approach is ineffective, even if the user profile is restricted from running interactive commands. The reason is that in today\u2019s connected world there are a multitude of interfaces into the system, from web browsers to PC clients, that bypass application menus. If there are no object-level controls, users of these newer interfaces have an open door to your data."}], "headers": [{"label": "page_footer", "id": 0, "page_no": 5, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.92394256591797, "t": 754.286865234375, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8889444470405579, "cells": [{"id": 0, "text": "2 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "2"}, {"label": "page_footer", "id": 1, "page_no": 5, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.81553649902344, "t": 754.6853637695312, "r": 328.72537, "b": 763.9682006835938, "coord_origin": "TOPLEFT"}, "confidence": 0.9476423859596252, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 6, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "text", "id": 2, "page_no": 6, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.9996337890625, "t": 70.63605499267578, "r": 544.30334, "b": 153.09298706054688, "coord_origin": "TOPLEFT"}, "confidence": 0.9872740507125854, "cells": [{"id": 2, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal ", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 541.19006, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "means that users should be given access only to the minimum set of data that is required to ", "bbox": {"l": 136.8, "t": 83.50847999999996, "r": 544.30334, "b": 92.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "perform their job. Often, users with object-level access are given access to row and column ", "bbox": {"l": 136.8, "t": 95.50829999999996, "r": 540.94299, "b": 104.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "values that are beyond what their business task requires because that object-level security ", "bbox": {"l": 136.80002, "t": 107.50811999999996, "r": 538.27454, "b": 116.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "provides an all-or-nothing solution. For example, object-level controls allow a manager to ", "bbox": {"l": 136.80002, "t": 119.50792999999999, "r": 530.23004, "b": 128.72095000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "access data about all employees. Most security policies limit a manager to accessing data ", "bbox": {"l": 136.80002, "t": 131.50775, "r": 536.26263, "b": 140.72076000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "only for the employees that they manage.", "bbox": {"l": 136.80002, "t": 143.50757, "r": 319.04318, "b": 152.72058000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Many businesses are trying to limit data access to a need-to-know basis. This security goal means that users should be given access only to the minimum set of data that is required to perform their job. Often, users with object-level access are given access to row and column values that are beyond what their business task requires because that object-level security provides an all-or-nothing solution. For example, object-level controls allow a manager to access data about all employees. Most security policies limit a manager to accessing data only for the employees that they manage."}, {"label": "section_header", "id": 3, "page_no": 6, "cluster": {"id": 3, "label": "section_header", "bbox": {"l": 64.4480209350586, "t": 172.2285919189453, "r": 301.46902, "b": 185.72744750976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9626136422157288, "cells": [{"id": 9, "text": "1.3.1", "bbox": {"l": 64.800003, "t": 173.33471999999995, "r": 94.033653, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Existing row and column control", "bbox": {"l": 97.687859, "t": 173.33471999999995, "r": 301.46902, "b": 185.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "1.3.1 Existing row and column control"}, {"label": "text", "id": 4, "page_no": 6, "cluster": {"id": 4, "label": "text", "bbox": {"l": 135.77957153320312, "t": 198.52076721191406, "r": 541.56738, "b": 257.1080322265625, "coord_origin": "TOPLEFT"}, "confidence": 0.9858148097991943, "cells": [{"id": 11, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL ", "bbox": {"l": 136.8, "t": 199.48870999999997, "r": 534.90112, "b": 208.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "views (or logical files) and application logic, as shown in Figure 1-2. However, ", "bbox": {"l": 136.8, "t": 211.48852999999997, "r": 480.47281000000004, "b": 220.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "application-based logic is easy to bypass with all of the different data access interfaces that ", "bbox": {"l": 136.8, "t": 223.48834, "r": 541.56738, "b": 232.70135000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) ", "bbox": {"l": 136.8, "t": 235.48816, "r": 537.39423, "b": 244.70117000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "and System i Navigator.", "bbox": {"l": 136.79999, "t": 247.48798, "r": 242.24352000000002, "b": 256.70099000000005, "coord_origin": "TOPLEFT"}}]}, "text": "Some IBM i clients have tried augmenting the all-or-nothing object-level security with SQL views (or logical files) and application logic, as shown in Figure 1-2. However, application-based logic is easy to bypass with all of the different data access interfaces that are provided by the IBM i operating system, such as Open Database Connectivity (ODBC) and System i Navigator."}, {"label": "text", "id": 5, "page_no": 6, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.9119110107422, "t": 268.6311340332031, "r": 547.4408, "b": 314.89898681640625, "coord_origin": "TOPLEFT"}, "confidence": 0.9875384569168091, "cells": [{"id": 16, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of ", "bbox": {"l": 136.79999, "t": 269.50757, "r": 526.88428, "b": 278.72058000000004, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "challenges. First, there is the complexity of managing all of the SQL view objects that are ", "bbox": {"l": 136.79999, "t": 281.50742, "r": 531.77087, "b": 290.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "used for securing data access. Second, scaling a view-based security solution can be difficult ", "bbox": {"l": 136.79999, "t": 293.50723000000005, "r": 547.4408, "b": 302.72021, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "as the amount of data grows and the number of users increases.", "bbox": {"l": 136.79999, "t": 305.50705, "r": 421.86725, "b": 314.72003, "coord_origin": "TOPLEFT"}}]}, "text": "Using SQL views to limit access to a subset of the data in a table also has its own set of challenges. First, there is the complexity of managing all of the SQL view objects that are used for securing data access. Second, scaling a view-based security solution can be difficult as the amount of data grows and the number of users increases."}, {"label": "text", "id": 6, "page_no": 6, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.0379638671875, "t": 326.60943603515625, "r": 547.23267, "b": 361.19879150390625, "coord_origin": "TOPLEFT"}, "confidence": 0.975760281085968, "cells": [{"id": 20, "text": "Even if you are willing to live with these performance and management issues, a user with ", "bbox": {"l": 136.79999, "t": 327.52661, "r": 536.46692, "b": 336.7395900000001, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "*ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily ", "bbox": {"l": 136.79999, "t": 339.52643, "r": 547.23267, "b": 348.73941, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "bypass the security controls that are built into an SQL view.", "bbox": {"l": 136.79999, "t": 351.52624999999995, "r": 397.88553, "b": 360.73923, "coord_origin": "TOPLEFT"}}]}, "text": "Even if you are willing to live with these performance and management issues, a user with *ALLOBJ access still can directly access all of the data in the underlying DB2 table and easily bypass the security controls that are built into an SQL view."}, {"label": "caption", "id": 7, "page_no": 6, "cluster": {"id": 7, "label": "caption", "bbox": {"l": 136.23910522460938, "t": 690.8873901367188, "r": 317.073486328125, "b": 700.1619262695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9457826614379883, "cells": [{"id": 23, "text": "Figure 1-2 Existing row and column controls", "bbox": {"l": 136.8, "t": 691.818, "r": 316.44727, "b": 700.142998, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 1-2 Existing row and column controls"}, {"label": "picture", "id": 8, "page_no": 6, "cluster": {"id": 8, "label": "picture", "bbox": {"l": 135.92466735839844, "t": 375.9272155761719, "r": 546.4456176757812, "b": 688.6098022460938, "coord_origin": "TOPLEFT"}, "confidence": 0.9838992357254028, "cells": [{"id": 24, "text": "User with", "bbox": {"l": 180.95911, "t": 383.45612, "r": 209.08017, "b": 389.0784, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*ALLOBJ access", "bbox": {"l": 170.00624, "t": 390.95251, "r": 220.10355, "b": 396.57480000000004, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 6, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.09014129638672, "t": 754.0796508789062, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8578534126281738, "cells": [{"id": 0, "text": "4 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 72.821999, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "4"}, {"label": "page_footer", "id": 1, "page_no": 6, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 87.840302, "t": 754.6302490234375, "r": 328.72537, "b": 763.9817504882812, "coord_origin": "TOPLEFT"}, "confidence": 0.9491621851921082, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 87.840302, "t": 755.538002, "r": 328.72537, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 7, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"17": {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "section_header", "id": 2, "page_no": 7, "cluster": {"id": 2, "label": "section_header", "bbox": {"l": 64.09011840820312, "t": 70.1792984008789, "r": 335.49551, "b": 83.9942626953125, "coord_origin": "TOPLEFT"}, "confidence": 0.969738245010376, "cells": [{"id": 2, "text": "2.1.6", "bbox": {"l": 64.800003, "t": 71.33471999999995, "r": 94.081459, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Change Function Usage CL command", "bbox": {"l": 97.741661, "t": 71.33471999999995, "r": 335.49551, "b": 83.32275000000004, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.6 Change Function Usage CL command"}, {"label": "text", "id": 3, "page_no": 7, "cluster": {"id": 3, "label": "text", "bbox": {"l": 135.83584594726562, "t": 96.62870788574219, "r": 547.28442, "b": 107.22466278076172, "coord_origin": "TOPLEFT"}, "confidence": 0.9551490545272827, "cells": [{"id": 4, "text": "The following CL commands can be used to work with, display, or change function usage IDs:", "bbox": {"l": 136.8, "t": 97.48870999999997, "r": 547.28442, "b": 106.70172000000014, "coord_origin": "TOPLEFT"}}]}, "text": "The following CL commands can be used to work with, display, or change function usage IDs:"}, {"label": "list_item", "id": 4, "page_no": 7, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.6907196044922, "t": 113.74026489257812, "r": 301.51749, "b": 124.55382537841797, "coord_origin": "TOPLEFT"}, "confidence": 0.9410473704338074, "cells": [{"id": 5, "text": "GLYPH", "bbox": {"l": 136.8, "t": 114.67767000000003, "r": 141.78, "b": 123.45245, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Work Function Usage (", "bbox": {"l": 151.20016, "t": 114.52826000000005, "r": 253.26227000000003, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "WRKFCNUSG", "bbox": {"l": 253.26028, "t": 114.67767000000003, "r": 298.1998, "b": 123.50225999999998, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": ")", "bbox": {"l": 298.20081, "t": 114.52826000000005, "r": 301.51749, "b": 123.74126999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Work Function Usage ( WRKFCNUSG )"}, {"label": "list_item", "id": 5, "page_no": 7, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.7242889404297, "t": 125.93077850341797, "r": 313.39777, "b": 136.68792724609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9417493939399719, "cells": [{"id": 9, "text": "GLYPH", "bbox": {"l": 136.80099, "t": 126.67749000000003, "r": 141.78099, "b": 135.45227, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Change Function Usage (", "bbox": {"l": 151.20116, "t": 126.52808000000005, "r": 265.13354, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "CHGFCNUSG", "bbox": {"l": 265.08081, "t": 126.67749000000003, "r": 310.02032, "b": 135.50207999999998, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": ")", "bbox": {"l": 310.08109, "t": 126.52808000000005, "r": 313.39777, "b": 135.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Change Function Usage ( CHGFCNUSG )"}, {"label": "list_item", "id": 6, "page_no": 7, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.71124267578125, "t": 137.9629364013672, "r": 310.81711, "b": 148.59957885742188, "coord_origin": "TOPLEFT"}, "confidence": 0.9562166929244995, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.80098, "t": 138.67731000000003, "r": 141.78098, "b": 147.45209, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Display Function Usage (", "bbox": {"l": 151.20114, "t": 138.52788999999996, "r": 262.5639, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "DSPFCNUSG", "bbox": {"l": 262.56091, "t": 138.67731000000003, "r": 307.50043, "b": 147.50189, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": ")", "bbox": {"l": 307.50043, "t": 138.52788999999996, "r": 310.81711, "b": 147.74090999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH Display Function Usage ( DSPFCNUSG )"}, {"label": "text", "id": 7, "page_no": 7, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.30247497558594, "t": 159.218505859375, "r": 512.53802, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9682289958000183, "cells": [{"id": 17, "text": "For example, the following ", "bbox": {"l": 136.79997, "t": 160.48766999999998, "r": 255.09984000000003, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "CHGFCNUSG", "bbox": {"l": 255.00027, "t": 160.63707999999997, "r": 299.99957, "b": 169.46167000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": " command shows granting authorization to user ", "bbox": {"l": 300.00055, "t": 160.48766999999998, "r": 512.53802, "b": 169.70068000000003, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "HBEDOYA to administer and manage RCAC rules:", "bbox": {"l": 136.80096, "t": 172.48748999999998, "r": 360.41989, "b": 181.70050000000003, "coord_origin": "TOPLEFT"}}]}, "text": "For example, the following CHGFCNUSG command shows granting authorization to user HBEDOYA to administer and manage RCAC rules:"}, {"label": "text", "id": 8, "page_no": 7, "cluster": {"id": 8, "label": "text", "bbox": {"l": 136.3306427001953, "t": 187.99078369140625, "r": 441.59686, "b": 198.88003540039062, "coord_origin": "TOPLEFT"}, "confidence": 0.9056942462921143, "cells": [{"id": 21, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)", "bbox": {"l": 136.80096, "t": 189.67645000000005, "r": 441.59686, "b": 198.45123, "coord_origin": "TOPLEFT"}}]}, "text": "CHGFCNUSG FCNID(QIBM_DB_SECADM) USER(HBEDOYA) USAGE(*ALLOWED)"}, {"label": "section_header", "id": 9, "page_no": 7, "cluster": {"id": 9, "label": "section_header", "bbox": {"l": 63.9356689453125, "t": 218.1382598876953, "r": 544.47546, "b": 232.12425231933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9636377096176147, "cells": [{"id": 22, "text": "2.1.7", "bbox": {"l": 64.800003, "t": 219.35468000000003, "r": 93.757614, "b": 231.34271, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Verifying function usage IDs for RCAC with the FUNCTION_USAGE view", "bbox": {"l": 97.377296, "t": 219.35468000000003, "r": 544.47546, "b": 231.34271, "coord_origin": "TOPLEFT"}}]}, "text": "2.1.7 Verifying function usage IDs for RCAC with the FUNCTION_USAGE view"}, {"label": "text", "id": 10, "page_no": 7, "cluster": {"id": 10, "label": "text", "bbox": {"l": 135.84828186035156, "t": 244.5770263671875, "r": 519.51794, "b": 266.7215, "coord_origin": "TOPLEFT"}, "confidence": 0.9737265110015869, "cells": [{"id": 24, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 ", "bbox": {"l": 136.8, "t": 245.50867000000005, "r": 519.51794, "b": 254.72168, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "describes the columns in the FUNCTION_USAGE view.", "bbox": {"l": 136.8, "t": 257.50847999999996, "r": 382.94443, "b": 266.7215, "coord_origin": "TOPLEFT"}}]}, "text": "The FUNCTION_USAGE view contains function usage configuration details. Table 2-1 describes the columns in the FUNCTION_USAGE view."}, {"label": "caption", "id": 11, "page_no": 7, "cluster": {"id": 11, "label": "caption", "bbox": {"l": 136.8, "t": 278.509521484375, "r": 284.9328308105469, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}, "confidence": 0.919783353805542, "cells": [{"id": 26, "text": "Table 2-1 FUNCTION_USAGE view", "bbox": {"l": 136.8, "t": 279.55798000000004, "r": 283.96805, "b": 287.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-1 FUNCTION_USAGE view"}, {"label": "text", "id": 12, "page_no": 7, "cluster": {"id": 12, "label": "text", "bbox": {"l": 135.81077575683594, "t": 451.328857421875, "r": 547.2804, "b": 473.72153, "coord_origin": "TOPLEFT"}, "confidence": 0.9647641777992249, "cells": [{"id": 27, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is ", "bbox": {"l": 136.8, "t": 452.50872999999996, "r": 547.2804, "b": 461.72171, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "shown in Example 2-1.", "bbox": {"l": 136.8, "t": 464.50854, "r": 237.76951999999997, "b": 473.72153, "coord_origin": "TOPLEFT"}}]}, "text": "To discover who has authorization to define and manage RCAC, you can use the query that is shown in Example 2-1."}, {"label": "caption", "id": 13, "page_no": 7, "cluster": {"id": 13, "label": "caption", "bbox": {"l": 136.28225708007812, "t": 485.76434326171875, "r": 462.98095703125, "b": 495.88201904296875, "coord_origin": "TOPLEFT"}, "confidence": 0.8165032267570496, "cells": [{"id": 29, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC", "bbox": {"l": 136.8, "t": 486.55798, "r": 462.35419, "b": 494.883, "coord_origin": "TOPLEFT"}}]}, "text": "Example 2-1 Query to determine who has authority to define and manage RCAC"}, {"label": "text", "id": 14, "page_no": 7, "cluster": {"id": 14, "label": "text", "bbox": {"l": 136.8, "t": 503.65802, "r": 331.67731, "b": 584.43163, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 30, "text": "SELECT", "bbox": {"l": 136.8, "t": 503.65802, "r": 171.26956, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "function_id,", "bbox": {"l": 182.75941, "t": 503.65802, "r": 251.69853, "b": 512.4328, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "user_name,", "bbox": {"l": 166.78244, "t": 515.6578400000001, "r": 241.73852999999997, "b": 524.43262, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "usage,", "bbox": {"l": 170.75961, "t": 527.65765, "r": 221.69901999999996, "b": 536.43242, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "user_type", "bbox": {"l": 167.53809, "t": 539.65747, "r": 236.69878, "b": 548.43222, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "FROM", "bbox": {"l": 136.8, "t": 551.65727, "r": 160.59396, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "function_usage", "bbox": {"l": 178.43944, "t": 551.65727, "r": 261.71829, "b": 560.43202, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHERE", "bbox": {"l": 136.8, "t": 563.65707, "r": 162.44176, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "function_id=\u2019QIBM_DB_SECADM\u2019", "bbox": {"l": 177.8268, "t": 563.65707, "r": 331.67731, "b": 572.43182, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ORDER BY", "bbox": {"l": 136.8, "t": 575.65688, "r": 178.77542, "b": 584.43163, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "user_name;", "bbox": {"l": 189.26929, "t": 575.65688, "r": 241.73856, "b": 584.43163, "coord_origin": "TOPLEFT"}}]}, "text": "SELECT function_id, user_name, usage, user_type FROM function_usage WHERE function_id=\u2019QIBM_DB_SECADM\u2019 ORDER BY user_name;"}, {"label": "section_header", "id": 15, "page_no": 7, "cluster": {"id": 15, "label": "section_header", "bbox": {"l": 64.18024444580078, "t": 619.3924560546875, "r": 249.59605000000002, "b": 635.6513671875, "coord_origin": "TOPLEFT"}, "confidence": 0.9656643271446228, "cells": [{"id": 41, "text": "2.2", "bbox": {"l": 64.800003, "t": 620.22063, "r": 87.569839, "b": 634.98363, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "Separation of duties", "bbox": {"l": 92.123802, "t": 620.22063, "r": 249.59605000000002, "b": 634.98363, "coord_origin": "TOPLEFT"}}]}, "text": "2.2 Separation of duties"}, {"label": "text", "id": 16, "page_no": 7, "cluster": {"id": 16, "label": "text", "bbox": {"l": 136.1588592529297, "t": 651.8870849609375, "r": 547.22345, "b": 710.182373046875, "coord_origin": "TOPLEFT"}, "confidence": 0.9853105545043945, "cells": [{"id": 43, "text": "Separation of duties helps businesses comply with industry regulations or organizational ", "bbox": {"l": 136.8, "t": 652.54872, "r": 529.09357, "b": 661.76172, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "requirements and simplifies the management of authorities. Separation of duties is commonly ", "bbox": {"l": 136.8, "t": 664.54852, "r": 547.22345, "b": 673.76153, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "used to prevent fraudulent activities or errors by a single person. It provides the ability for ", "bbox": {"l": 136.8, "t": 676.54833, "r": 530.89716, "b": 685.76134, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "administrative functions to be divided across individuals without overlapping responsibilities, ", "bbox": {"l": 136.80002, "t": 688.54814, "r": 544.33832, "b": 697.7611469999999, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "so that one user does not possess unlimited authority, such as with the *ALLOBJ authority.", "bbox": {"l": 136.80002, "t": 700.547951, "r": 536.28363, "b": 709.760956, "coord_origin": "TOPLEFT"}}]}, "text": "Separation of duties helps businesses comply with industry regulations or organizational requirements and simplifies the management of authorities. Separation of duties is commonly used to prevent fraudulent activities or errors by a single person. It provides the ability for administrative functions to be divided across individuals without overlapping responsibilities, so that one user does not possess unlimited authority, such as with the *ALLOBJ authority."}, {"label": "table", "id": 17, "page_no": 7, "cluster": {"id": 17, "label": "table", "bbox": {"l": 135.52508544921875, "t": 289.7249755859375, "r": 545.87060546875, "b": 442.0505065917969, "coord_origin": "TOPLEFT"}, "confidence": 0.985169529914856, "cells": [{"id": 48, "text": "Column name", "bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Data type", "bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "Description", "bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "FUNCTION_ID", "bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "VARCHAR(30)", "bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ID of the function.", "bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "USER_NAME", "bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "VARCHAR(10)", "bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Name of the user profile that has a usage setting for this ", "bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 342.84302, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "function.", "bbox": {"l": 289.4397, "t": 345.55832, "r": 323.43362, "b": 353.88333, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "USAGE", "bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "VARCHAR(7)", "bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "Usage setting:", "bbox": {"l": 289.41626, "t": 364.51862, "r": 346.88757, "b": 372.84363, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 375.69394000000005, "r": 293.9397, "b": 383.62292, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "ALLOWED: The user profile is allowed to use the function.", "bbox": {"l": 303.83969, "t": 375.55893, "r": 535.16766, "b": 383.88394, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 386.67395, "r": 293.9397, "b": 394.60294, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "DENIED: The user profile is not allowed to use the function.", "bbox": {"l": 303.83969, "t": 386.53894, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "USER_TYPE", "bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "VARCHAR(5)", "bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "Type of user profile:", "bbox": {"l": 289.43161, "t": 405.55865, "r": 367.8009, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 416.67368000000005, "r": 293.9397, "b": 424.60266, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "USER: The user profile is a user.", "bbox": {"l": 303.83969, "t": 416.53867, "r": 434.78159, "b": 424.86368, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "GLYPH", "bbox": {"l": 289.4397, "t": 427.65369, "r": 293.9397, "b": 435.58267000000006, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "GROUP: The user profile is a group.", "bbox": {"l": 303.83969, "t": 427.51868, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 5, "num_cols": 3, "table_cells": [{"bbox": {"l": 142.8, "t": 296.5379899999999, "r": 202.245, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Column name", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 216.80878999999996, "t": 296.5379899999999, "r": 257.21069, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Data type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 289.47479, "t": 296.5379899999999, "r": 338.89468, "b": 304.86301, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 315.55771, "r": 203.2323, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "FUNCTION_ID", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.7854, "t": 315.55771, "r": 276.0036, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(30)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.4577, "t": 315.55771, "r": 359.85394, "b": 323.88272, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "ID of the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 334.51801, "r": 198.6693, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.74129999999997, "t": 334.51801, "r": 275.92349, "b": 342.84302, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(10)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.38208, "t": 334.51801, "r": 515.05359, "b": 353.88333, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the user profile that has a usage setting for this function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.79999, "t": 364.51862, "r": 173.98318, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USAGE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.77367999999998, "t": 364.51862, "r": 270.97977, "b": 372.84363, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(7)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.41626, "t": 364.51862, "r": 539.10712, "b": 394.86395, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Usage setting: GLYPH ALLOWED: The user profile is allowed to use the function. GLYPH DENIED: The user profile is not allowed to use the function.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8, "t": 405.55865, "r": 196.2249, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 216.75211, "t": 405.55865, "r": 270.99872, "b": 413.88367000000005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(5)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 289.43161, "t": 405.55865, "r": 448.11963000000003, "b": 435.84369, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of user profile: GLYPH USER: The user profile is a user. GLYPH GROUP: The user profile is a group.", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 7, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.4488525390625, "t": 754.418701171875, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9166076183319092, "cells": [{"id": 0, "text": "10 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "10"}, {"label": "page_footer", "id": 1, "page_no": 7, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.35774993896484, "t": 754.6892700195312, "r": 334.42142, "b": 763.9585571289062, "coord_origin": "TOPLEFT"}, "confidence": 0.9529878497123718, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 8, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"9": {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}, {"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 8, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.92747497558594, "t": 70.65541076660156, "r": 542.69434, "b": 141.03610229492188, "coord_origin": "TOPLEFT"}, "confidence": 0.9789126515388489, "cells": [{"id": 2, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 542.69434, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same ", "bbox": {"l": 136.79959, "t": 83.50885000000017, "r": 513.67804, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "privileges Theresa was granting to others. Therefore, to grant *USE privileges to the ", "bbox": {"l": 136.79959, "t": 95.50867000000005, "r": 509.71902, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of ", "bbox": {"l": 136.79959, "t": 107.50847999999996, "r": 528.20184, "b": 116.72149999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the ", "bbox": {"l": 136.79959, "t": 119.50829999999996, "r": 531.84015, "b": 128.72131000000002, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "PAYROLL table even though Theresa\u2019s job description was only to manage its security.", "bbox": {"l": 136.79959, "t": 131.50811999999996, "r": 519.24982, "b": 140.72113000000002, "coord_origin": "TOPLEFT"}}]}, "text": "For example, assume that a business has assigned the duty to manage security on IBM i to Theresa. Before release IBM i 7.2, to grant privileges, Theresa had to have the same privileges Theresa was granting to others. Therefore, to grant *USE privileges to the PAYROLL table, Theresa had to have *OBJMGT and *USE authority (or a higher level of authority, such as *ALLOBJ). This requirement allowed Theresa to access the data in the PAYROLL table even though Theresa\u2019s job description was only to manage its security."}, {"label": "text", "id": 3, "page_no": 8, "cluster": {"id": 3, "label": "text", "bbox": {"l": 136.04833984375, "t": 152.51307678222656, "r": 547.30396, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9665539860725403, "cells": [{"id": 8, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, ", "bbox": {"l": 136.79959, "t": 153.52770999999996, "r": 544.16064, "b": 162.74072, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "changes ownership, or changes the primary group without giving access to the object or, in ", "bbox": {"l": 136.79959, "t": 165.52752999999996, "r": 540.66156, "b": 174.74054, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "the case of a database table, to the data that is in the table or allowing other operations on the ", "bbox": {"l": 136.79959, "t": 177.52733999999998, "r": 547.30396, "b": 186.74036, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "table. ", "bbox": {"l": 136.79959, "t": 189.52715999999998, "r": 163.6189, "b": 198.74017000000003, "coord_origin": "TOPLEFT"}}]}, "text": "In IBM i 7.2, the QIBM_DB_SECADM function usage grants authorities, revokes authorities, changes ownership, or changes the primary group without giving access to the object or, in the case of a database table, to the data that is in the table or allowing other operations on the table."}, {"label": "text", "id": 4, "page_no": 8, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.00685119628906, "t": 210.41148376464844, "r": 538.65076, "b": 233.08047485351562, "coord_origin": "TOPLEFT"}, "confidence": 0.9691813588142395, "cells": [{"id": 12, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special ", "bbox": {"l": 136.79959, "t": 211.48694, "r": 538.65076, "b": 220.69994999999994, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "authority and can be given to a user or a group.", "bbox": {"l": 136.79959, "t": 223.48676, "r": 346.34808, "b": 232.69976999999994, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM function usage can be granted only by a user with *SECADM special authority and can be given to a user or a group."}, {"label": "text", "id": 5, "page_no": 8, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.68702697753906, "t": 244.5381622314453, "r": 545.79602, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}, "confidence": 0.9729602932929993, "cells": [{"id": 14, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows ", "bbox": {"l": 136.79959, "t": 245.50635, "r": 545.79602, "b": 254.71936000000005, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "a user is allowed to access in a table and whether a user is allowed to see information in ", "bbox": {"l": 136.79959, "t": 257.50616, "r": 529.46149, "b": 266.71918000000005, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "certain columns of a table.", "bbox": {"l": 136.79959, "t": 269.50598, "r": 253.47696999999997, "b": 278.71898999999996, "coord_origin": "TOPLEFT"}}]}, "text": "QIBM_DB_SECADM also is responsible for administering RCAC, which restricts which rows a user is allowed to access in a table and whether a user is allowed to see information in certain columns of a table."}, {"label": "text", "id": 6, "page_no": 8, "cluster": {"id": 6, "label": "text", "bbox": {"l": 135.86065673828125, "t": 290.6051330566406, "r": 539.80713, "b": 336.73801, "coord_origin": "TOPLEFT"}, "confidence": 0.9815152883529663, "cells": [{"id": 17, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function ", "bbox": {"l": 136.79959, "t": 291.52557, "r": 533.78137, "b": 300.73856, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "usage ID, but absolutely no other data privileges. The result is that the RCAC administrator ", "bbox": {"l": 136.79959, "t": 303.52539, "r": 539.80713, "b": 312.73837000000003, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized ", "bbox": {"l": 136.79959, "t": 315.52521, "r": 534.5741, "b": 324.73819, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "access to data itself.", "bbox": {"l": 136.79959, "t": 327.52502, "r": 227.02324, "b": 336.73801, "coord_origin": "TOPLEFT"}}]}, "text": "A preferred practice is that the RCAC administrator has the QIBM_DB_SECADM function usage ID, but absolutely no other data privileges. The result is that the RCAC administrator can deploy and maintain the RCAC constructs, but cannot grant themselves unauthorized access to data itself."}, {"label": "text", "id": 7, "page_no": 8, "cluster": {"id": 7, "label": "text", "bbox": {"l": 135.7205352783203, "t": 348.60931396484375, "r": 543.06714, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}, "confidence": 0.9672255516052246, "cells": [{"id": 21, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to ", "bbox": {"l": 136.79959, "t": 349.48483, "r": 543.06714, "b": 358.69780999999995, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "the different CL commands and DB2 for i tools.", "bbox": {"l": 136.79959, "t": 361.48465, "r": 343.79236, "b": 370.69763000000006, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 shows a comparison of the different function usage IDs and *JOBCTL authority to the different CL commands and DB2 for i tools."}, {"label": "caption", "id": 8, "page_no": 8, "cluster": {"id": 8, "label": "caption", "bbox": {"l": 64.800003, "t": 382.5287170410156, "r": 392.4624328613281, "b": 392.25494384765625, "coord_origin": "TOPLEFT"}, "confidence": 0.933719277381897, "cells": [{"id": 23, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority", "bbox": {"l": 64.800003, "t": 383.5379899999999, "r": 391.75464, "b": 391.86301, "coord_origin": "TOPLEFT"}}]}, "text": "Table 2-2 Comparison of the different function usage IDs and *JOBCTL authority"}, {"label": "table", "id": 9, "page_no": 8, "cluster": {"id": 9, "label": "table", "bbox": {"l": 64.41139221191406, "t": 393.6136474609375, "r": 547.3950805664062, "b": 721.60791015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9899571537971497, "cells": [{"id": 24, "text": "User action", "bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "*JOBCTL", "bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "QIBM_DB_SECADM", "bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "QIBM_DB_SQLADM", "bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "QIBM_DB_SYSMON", "bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "No Authority", "bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "SET CURRENT DEGREE", "bbox": {"l": 70.800003, "t": 498.69299, "r": 151.6794, "b": 506.66699, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " (SQL statement)", "bbox": {"l": 151.6803, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "X", "bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "X", "bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "CHGQRYA", "bbox": {"l": 70.800018, "t": 517.65329, "r": 102.23972, "b": 525.62729, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": " command targeting a different user\u2019s job", "bbox": {"l": 102.23972, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "X", "bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "X", "bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 536.67299, "r": 106.73975, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": " or ", "bbox": {"l": 106.73975, "t": 536.5379800000001, "r": 119.77895, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 536.67299, "r": 155.69974, "b": 544.64699, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": " commands targeting a different user\u2019s job", "bbox": {"l": 155.69974, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "X", "bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "X", "bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "STRDBMON", "bbox": {"l": 70.800049, "t": 555.69269, "r": 106.73975, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": " or ", "bbox": {"l": 106.73975, "t": 555.55768, "r": 119.77895, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ENDDBMON", "bbox": {"l": 119.69975000000001, "t": 555.69269, "r": 155.69974, "b": 563.66669, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": " commands targeting a job that matches the current user", "bbox": {"l": 155.69974, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "X", "bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "X", "bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "X", "bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "X", "bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "X", "bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "X", "bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "X", "bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "Visual Explain within Run SQL scripts", "bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "X", "bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "X", "bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "X", "bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 60, "text": "X", "bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}}, {"id": 61, "text": "Visual Explain outside of Run SQL scripts", "bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 62, "text": "X", "bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 63, "text": "X", "bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}}, {"id": 64, "text": "ANALYZE PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 65, "text": "X", "bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 66, "text": "X", "bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}}, {"id": 67, "text": "DUMP PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 68, "text": "X", "bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 69, "text": "X", "bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}}, {"id": 70, "text": "MODIFY PLAN CACHE procedure", "bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 71, "text": "X", "bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 72, "text": "X", "bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}}, {"id": 73, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 74, "text": "X", "bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 75, "text": "X", "bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}}, {"id": 76, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 77, "text": "X", "bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}}, {"id": 78, "text": "X", "bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["rhed", "fcel", "fcel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "fcel", "fcel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl", "rhed", "fcel", "ecel", "fcel", "ecel", "ecel", "nl"], "num_rows": 13, "num_cols": 6, "table_cells": [{"bbox": {"l": 70.800301, "t": 400.51827999999995, "r": 119.78551, "b": 408.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "User action", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 424.93805, "t": 447.52255, "r": 433.26297000000005, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "*JOBCTL", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 450.13806, "t": 401.6000700000001, "r": 458.46298, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "QIBM_DB_SECADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 475.93835000000007, "t": 401.53442, "r": 484.26327999999995, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "QIBM_DB_SQLADM", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 501.13837, "t": 401.6145, "r": 509.46329, "b": 487.01999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "QIBM_DB_SYSMON", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 526.39862, "t": 432.79944, "r": 534.72357, "b": 487.02005, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "No Authority", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 498.55798, "r": 220.15681000000004, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SET CURRENT DEGREE (SQL statement)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0, "t": 498.55798, "r": 435.00299000000007, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00031, "t": 498.55798, "r": 486.0033, "b": 506.883, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 517.51828, "r": 264.5538, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHGQRYA command targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 517.51828, "r": 435.00302000000005, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 517.51828, "r": 486.00333, "b": 525.84329, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 536.5379800000001, "r": 322.50574, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a different user\u2019s job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 536.5379800000001, "r": 435.00302000000005, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 536.5379800000001, "r": 486.00333, "b": 544.8629900000001, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 555.55768, "r": 381.02185, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "STRDBMON or ENDDBMON commands targeting a job that matches the current user", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.00003, "t": 555.55768, "r": 435.00302000000005, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00034, "t": 555.55768, "r": 486.00333, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.26061999999996, "t": 555.55768, "r": 511.26361, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76031, "t": 555.55768, "r": 536.76331, "b": 563.8826899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800049, "t": 574.51797, "r": 359.51736, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "QUSRJOBI() API format 900 or System i Navigator\u2019s SQL Details for Job", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 574.51797, "r": 435.00305000000003, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 574.51797, "r": 486.00335999999993, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 574.51797, "r": 511.26367, "b": 582.84299, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 593.5376699999999, "r": 220.75178999999997, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain within Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 593.5376699999999, "r": 435.00305000000003, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 593.5376699999999, "r": 486.00335999999993, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 505.2606799999999, "t": 593.5376699999999, "r": 511.26367, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 4, "end_col_offset_idx": 5, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 530.76038, "t": 593.5376699999999, "r": 536.76337, "b": 601.8626899999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 5, "end_col_offset_idx": 6, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 612.55737, "r": 236.6548, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Visual Explain outside of Run SQL scripts", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 612.55737, "r": 435.00305000000003, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 612.55737, "r": 486.00335999999993, "b": 620.88239, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 631.51767, "r": 213.12968, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ANALYZE PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 631.51767, "r": 435.00305000000003, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 631.51767, "r": 486.00335999999993, "b": 639.84268, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 650.53737, "r": 199.87808, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "DUMP PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 650.53737, "r": 435.00305000000003, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 650.53737, "r": 486.00335999999993, "b": 658.86238, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 669.55708, "r": 208.36777, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE procedure", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 669.55708, "r": 435.00305000000003, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 669.55708, "r": 486.00335999999993, "b": 677.88207, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 10, "end_row_offset_idx": 11, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 688.57677, "r": 411.20264, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "MODIFY PLAN CACHE PROPERTIES procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 688.57677, "r": 435.00305000000003, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 688.57677, "r": 486.00335999999993, "b": 696.9017719999999, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 11, "end_row_offset_idx": 12, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800079, "t": 707.537071, "r": 377.12585, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CHANGE PLAN CACHE SIZE procedure (currently does not check authority)", "column_header": false, "row_header": true, "row_section": false}, {"bbox": {"l": 429.0000600000001, "t": 707.537071, "r": 435.00305000000003, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "X", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 480.00037, "t": 707.537071, "r": 486.00335999999993, "b": 715.862068, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 12, "end_row_offset_idx": 13, "start_col_offset_idx": 3, "end_col_offset_idx": 4, "text": "X", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 8, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 354.4815673828125, "t": 754.9415893554688, "r": 523.54071, "b": 764.1055297851562, "coord_origin": "TOPLEFT"}, "confidence": 0.9508126378059387, "cells": [{"id": 0, "text": "Chapter 2. Roles and separation of duties ", "bbox": {"l": 355.32001, "t": 755.538002, "r": 523.54071, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 2. Roles and separation of duties"}, {"label": "page_footer", "id": 1, "page_no": 8, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0808715820312, "t": 754.2325439453125, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8987302780151367, "cells": [{"id": 1, "text": "11", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "11"}]}}, {"page_no": 9, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}, {"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 9, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.73501586914062, "t": 70.48638153076172, "r": 528.73059, "b": 92.9990234375, "coord_origin": "TOPLEFT"}, "confidence": 0.872844934463501, "cells": [{"id": 2, "text": "The SQL ", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 179.58179, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CREATE PERMISSION", "bbox": {"l": 179.57977, "t": 71.65845000000002, "r": 264.47879, "b": 80.48302999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": " statement that is shown in Figure 3-1 is used to define and ", "bbox": {"l": 264.53955, "t": 71.50903000000005, "r": 528.73059, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "initially enable or disable the row access rules.", "bbox": {"l": 136.79956, "t": 83.50885000000017, "r": 341.71762, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}]}, "text": "The SQL CREATE PERMISSION statement that is shown in Figure 3-1 is used to define and initially enable or disable the row access rules."}, {"label": "caption", "id": 3, "page_no": 9, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.3166961669922, "t": 413.26751708984375, "r": 342.55548095703125, "b": 422.8843078613281, "coord_origin": "TOPLEFT"}, "confidence": 0.9387834072113037, "cells": [{"id": 6, "text": "Figure 3-1 CREATE PERMISSION SQL statement", "bbox": {"l": 136.8, "t": 414.138, "r": 341.97659, "b": 422.46301, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-1 CREATE PERMISSION SQL statement"}, {"label": "section_header", "id": 4, "page_no": 9, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 136.24984741210938, "t": 438.7343444824219, "r": 215.88082885742188, "b": 451.04401, "coord_origin": "TOPLEFT"}, "confidence": 0.9477567076683044, "cells": [{"id": 7, "text": "Column mask", "bbox": {"l": 136.8, "t": 439.94399999999996, "r": 215.37601, "b": 451.04401, "coord_origin": "TOPLEFT"}}]}, "text": "Column mask"}, {"label": "text", "id": 5, "page_no": 9, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.803466796875, "t": 453.9210510253906, "r": 542.76648, "b": 500.30115, "coord_origin": "TOPLEFT"}, "confidence": 0.9843975901603699, "cells": [{"id": 8, "text": "A column mask is a database object that manifests a column value access control rule for a ", "bbox": {"l": 136.8, "t": 455.08871000000005, "r": 542.76648, "b": 464.3017, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "specific column in a specific table. It uses a CASE expression that describes what you see ", "bbox": {"l": 136.8, "t": 467.08853, "r": 537.84125, "b": 476.30151, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "when you access the column. For example, a teller can see only the last four digits of a tax ", "bbox": {"l": 136.8, "t": 479.08835, "r": 538.80927, "b": 488.30133, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "identification number.", "bbox": {"l": 136.8, "t": 491.08817, "r": 231.20888, "b": 500.30115, "coord_origin": "TOPLEFT"}}]}, "text": "A column mask is a database object that manifests a column value access control rule for a specific column in a specific table. It uses a CASE expression that describes what you see when you access the column. For example, a teller can see only the last four digits of a tax identification number."}, {"label": "picture", "id": 6, "page_no": 9, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 135.9717559814453, "t": 107.41072845458984, "r": 545.4180908203125, "b": 410.60931396484375, "coord_origin": "TOPLEFT"}, "confidence": 0.9788318872451782, "cells": [{"id": 12, "text": "CREATE PERMISSION", "bbox": {"l": 148.1337, "t": 139.67969000000005, "r": 246.7961, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "<", "bbox": {"l": 251.86685, "t": 139.67969000000005, "r": 257.58578, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "permission name", "bbox": {"l": 257.59152, "t": 139.67969000000005, "r": 336.99741, "b": 149.50982999999997, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": ">", "bbox": {"l": 337.01233, "t": 139.67969000000005, "r": 342.73126, "b": 149.49834999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Names the row permission for row access control", "bbox": {"l": 346.56491, "t": 121.46252000000004, "r": 530.74371, "b": 129.33507999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "ON", "bbox": {"l": 148.1337, "t": 181.06255999999996, "r": 163.45079, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "<", "bbox": {"l": 168.58405, "t": 181.06255999999996, "r": 174.30298, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "table name", "bbox": {"l": 174.30872, "t": 181.06255999999996, "r": 226.86777, "b": 190.8927, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": ">", "bbox": {"l": 226.86548000000002, "t": 181.06255999999996, "r": 232.58441, "b": 190.88122999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "Identifies the table on which the row ", "bbox": {"l": 311.3204, "t": 166.29413, "r": 450.77191000000005, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "permission is created", "bbox": {"l": 450.86123999999995, "t": 166.29413, "r": 529.93134, "b": 174.16669000000002, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "AS ", "bbox": {"l": 148.1337, "t": 222.44550000000004, "r": 163.10973, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "<", "bbox": {"l": 165.68669, "t": 222.44550000000004, "r": 171.40562, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "correlation name", "bbox": {"l": 171.41136, "t": 222.44550000000004, "r": 251.20424000000003, "b": 232.27562999999998, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": ">", "bbox": {"l": 251.21115, "t": 222.44550000000004, "r": 256.93008, "b": 232.26415999999995, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Specifies an optional correlation name that ca", "bbox": {"l": 235.79649, "t": 204.22839, "r": 406.62051, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "be used within search-condition", "bbox": {"l": 480.53094, "t": 204.22839, "r": 532.89496, "b": 212.10095, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "FOR ROWS", "bbox": {"l": 148.1337, "t": 263.82836999999995, "r": 199.72467, "b": 273.65851, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Indicates that a row permission is cr", "bbox": {"l": 321.56271, "t": 246.09411999999998, "r": 455.3432, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "eated", "bbox": {"l": 455.20786000000004, "t": 246.09411999999998, "r": 476.48404, "b": 253.96667000000002, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Specifies a condition that can be ", "bbox": {"l": 321.5972, "t": 266.30267000000003, "r": 444.0292400000001, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "true,", "bbox": {"l": 444.07986, "t": 266.30267000000003, "r": 459.08678999999995, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "false, or unknown", "bbox": {"l": 464.2088, "t": 266.30267000000003, "r": 530.94897, "b": 274.17523000000006, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHERE", "bbox": {"l": 148.1337, "t": 291.41708, "r": 183.42342, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "<", "bbox": {"l": 188.61984, "t": 291.41708, "r": 194.33878, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "logic to test: user and/or group and/or column value", "bbox": {"l": 194.34451, "t": 291.41708, "r": 437.04659999999996, "b": 301.24722, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": ">", "bbox": {"l": 437.09020999999996, "t": 291.41708, "r": 442.80914000000007, "b": 301.23572, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ENFORCED FOR ALL ACCESS", "bbox": {"l": 148.1337, "t": 332.79999, "r": 278.77805, "b": 342.63013, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Specifies that the row permission applies to all ref", "bbox": {"l": 271.55829, "t": 314.58276, "r": 457.4451, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "erences of the table", "bbox": {"l": 457.19281, "t": 314.58276, "r": 531.74939, "b": 322.45535, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "ENABLE", "bbox": {"l": 148.1337, "t": 374.18289, "r": 185.17584, "b": 384.01302999999996, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Specifies that the row permission is to", "bbox": {"l": 312.28601, "t": 355.96576000000005, "r": 454.33505, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": " be initially enabled", "bbox": {"l": 454.3461, "t": 355.96576000000005, "r": 527.05286, "b": 363.83835, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "S", "bbox": {"l": 311.73431, "t": 376.65717, "r": 315.94684, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "ifith t th", "bbox": {"l": 329.28326, "t": 376.65717, "r": 371.71786, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "i", "bbox": {"l": 415.0014, "t": 376.65717, "r": 417.09616, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "i", "bbox": {"l": 424.27356, "t": 376.65717, "r": 426.36832, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "i", "bbox": {"l": 438.13208, "t": 376.65717, "r": 440.2268399999999, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "t", "bbox": {"l": 445.88681, "t": 376.65717, "r": 448.95757999999995, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "b", "bbox": {"l": 455.8532400000001, "t": 376.65717, "r": 460.67346000000003, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "i", "bbox": {"l": 467.36746, "t": 376.65717, "r": 470.06998000000004, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "iti ll", "bbox": {"l": 472.73705999999993, "t": 376.65717, "r": 490.1676, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "di", "bbox": {"l": 496.33661, "t": 376.65717, "r": 503.2608, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "bl d", "bbox": {"l": 511.26138, "t": 376.65717, "r": 527.59674, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "DISABLE", "bbox": {"l": 148.1337, "t": 387.9772, "r": 187.6265, "b": 397.80734000000007, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": ";", "bbox": {"l": 187.58514, "t": 387.9772, "r": 190.6628, "b": 397.79583999999994, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Specifies that the row permission is to ", "bbox": {"l": 311.73431, "t": 376.65717, "r": 455.83047000000005, "b": 384.52975, "coord_origin": "TOPLEFT"}}, {"id": 59, "text": "be initially disabled", "bbox": {"l": 455.8848, "t": 376.65717, "r": 527.62122, "b": 384.52975, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 9, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5666809082031, "t": 754.718017578125, "r": 523.60162, "b": 764.0823974609375, "coord_origin": "TOPLEFT"}, "confidence": 0.9526246786117554, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 9, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.09998, "t": 754.310302734375, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.907107949256897, "cells": [{"id": 1, "text": "15", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "15"}]}}, {"page_no": 10, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "SignedonasALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 218.71170000000004, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"14": {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}, {"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "caption", "id": 2, "page_no": 10, "cluster": {"id": 2, "label": "caption", "bbox": {"l": 135.82176208496094, "t": 70.68284606933594, "r": 412.20758, "b": 80.81541442871094, "coord_origin": "TOPLEFT"}, "confidence": 0.7875164747238159, "cells": [{"id": 2, "text": "Table 3-1 summarizes these special registers and their values.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 412.20758, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 summarizes these special registers and their values."}, {"label": "caption", "id": 3, "page_no": 10, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 136.8, "t": 92.7220458984375, "r": 372.7710876464844, "b": 101.9398422241211, "coord_origin": "TOPLEFT"}, "confidence": 0.9253708720207214, "cells": [{"id": 3, "text": "Table 3-1 Special registers and their corresponding values", "bbox": {"l": 136.8, "t": 93.49805000000003, "r": 372.60364, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-1 Special registers and their corresponding values"}, {"label": "text", "id": 4, "page_no": 10, "cluster": {"id": 4, "label": "text", "bbox": {"l": 136.3730926513672, "t": 213.3656463623047, "r": 538.4939, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}, "confidence": 0.9466656446456909, "cells": [{"id": 4, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is ", "bbox": {"l": 136.8, "t": 214.48870999999997, "r": 538.4939, "b": 223.70172000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "used:", "bbox": {"l": 136.8, "t": 226.48852999999997, "r": 161.20995, "b": 235.70154000000002, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 shows the difference in the special register values when an adopted authority is used:"}, {"label": "list_item", "id": 5, "page_no": 10, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 135.5663299560547, "t": 242.545654296875, "r": 411.36139, "b": 252.77870178222656, "coord_origin": "TOPLEFT"}, "confidence": 0.9504424333572388, "cells": [{"id": 6, "text": "GLYPH", "bbox": {"l": 136.8, "t": 243.67749000000003, "r": 141.78, "b": 252.45227, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "A user connects to the server using the user profile ALICE.", "bbox": {"l": 151.20016, "t": 243.52808000000005, "r": 411.36139, "b": 252.74108999999999, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH A user connects to the server using the user profile ALICE."}, {"label": "list_item", "id": 6, "page_no": 10, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 135.5452880859375, "t": 259.2925720214844, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9445974230766296, "cells": [{"id": 8, "text": "GLYPH", "bbox": {"l": 136.8, "t": 260.65729, "r": 141.78, "b": 269.43206999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "USER and CURRENT USER initially have the same value of ALICE.", "bbox": {"l": 151.20016, "t": 260.50787, "r": 453.2580899999999, "b": 269.72089000000005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH USER and CURRENT USER initially have the same value of ALICE."}, {"label": "list_item", "id": 7, "page_no": 10, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 135.3970947265625, "t": 276.51788330078125, "r": 541.44983, "b": 298.98980712890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9742953777313232, "cells": [{"id": 10, "text": "GLYPH", "bbox": {"l": 136.8, "t": 277.63707999999997, "r": 141.78, "b": 286.41187, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE ", "bbox": {"l": 151.20016, "t": 277.48767, "r": 541.44983, "b": 286.70068, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "and was created to adopt JOE\u2019s authority when it is called.", "bbox": {"l": 151.20016, "t": 289.4875200000001, "r": 409.82953, "b": 298.7005, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH ALICE calls an SQL procedure that is named proc1, which is owned by user profile JOE and was created to adopt JOE\u2019s authority when it is called."}, {"label": "list_item", "id": 8, "page_no": 10, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.5677947998047, "t": 305.81854248046875, "r": 547.21674, "b": 340.5078125, "coord_origin": "TOPLEFT"}, "confidence": 0.981132447719574, "cells": [{"id": 13, "text": "GLYPH", "bbox": {"l": 136.8, "t": 306.67647999999997, "r": 141.78, "b": 315.45126000000005, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "While the procedure is running, the special register USER still contains the value of ALICE ", "bbox": {"l": 151.20016, "t": 306.5271, "r": 547.21674, "b": 315.74008, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "because it excludes any adopted authority. The special register CURRENT USER ", "bbox": {"l": 151.20117, "t": 318.52691999999996, "r": 514.32971, "b": 327.7399, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "contains the value of JOE because it includes any adopted authority.", "bbox": {"l": 151.20117, "t": 330.52673, "r": 453.3249200000001, "b": 339.73972, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH While the procedure is running, the special register USER still contains the value of ALICE because it excludes any adopted authority. The special register CURRENT USER contains the value of JOE because it includes any adopted authority."}, {"label": "list_item", "id": 9, "page_no": 10, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.56973266601562, "t": 346.4946594238281, "r": 547.35406, "b": 368.9356384277344, "coord_origin": "TOPLEFT"}, "confidence": 0.9748278260231018, "cells": [{"id": 17, "text": "GLYPH", "bbox": {"l": 136.80101, "t": 347.65591, "r": 141.78101, "b": 356.43069, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "When proc1 ends, the session reverts to its original state with both USER and CURRENT ", "bbox": {"l": 151.20117, "t": 347.50653, "r": 547.35406, "b": 356.71950999999996, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "USER having the value of ALICE.", "bbox": {"l": 151.20117, "t": 359.50635, "r": 299.57532, "b": 368.71933000000007, "coord_origin": "TOPLEFT"}}]}, "text": "GLYPH When proc1 ends, the session reverts to its original state with both USER and CURRENT USER having the value of ALICE."}, {"label": "caption", "id": 10, "page_no": 10, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.22442626953125, "t": 596.1806030273438, "r": 342.349853515625, "b": 605.74462890625, "coord_origin": "TOPLEFT"}, "confidence": 0.9274528622627258, "cells": [{"id": 20, "text": "Figure 3-5 Special registers and adopted authority", "bbox": {"l": 136.8, "t": 596.7179, "r": 341.25662, "b": 605.04291, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-5 Special registers and adopted authority"}, {"label": "section_header", "id": 11, "page_no": 10, "cluster": {"id": 11, "label": "section_header", "bbox": {"l": 64.079833984375, "t": 624.3213500976562, "r": 247.02536, "b": 637.8447875976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9659212827682495, "cells": [{"id": 21, "text": "3.2.2", "bbox": {"l": 64.800003, "t": 625.55472, "r": 94.20356, "b": 637.54272, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Built-in global variables", "bbox": {"l": 97.879005, "t": 625.55472, "r": 247.02536, "b": 637.54272, "coord_origin": "TOPLEFT"}}]}, "text": "3.2.2 Built-in global variables"}, {"label": "text", "id": 12, "page_no": 10, "cluster": {"id": 12, "label": "text", "bbox": {"l": 136.3346710205078, "t": 650.7590942382812, "r": 518.00116, "b": 672.92153, "coord_origin": "TOPLEFT"}, "confidence": 0.9696776866912842, "cells": [{"id": 23, "text": "Built-in global variables are provided with the database manager and are used in SQL ", "bbox": {"l": 136.8, "t": 651.70872, "r": 518.00116, "b": 660.92172, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "statements to retrieve scalar values that are associated with the variables.", "bbox": {"l": 136.8, "t": 663.70853, "r": 462.81759999999997, "b": 672.92153, "coord_origin": "TOPLEFT"}}]}, "text": "Built-in global variables are provided with the database manager and are used in SQL statements to retrieve scalar values that are associated with the variables."}, {"label": "text", "id": 13, "page_no": 10, "cluster": {"id": 13, "label": "text", "bbox": {"l": 136.17970275878906, "t": 684.6286010742188, "r": 532.3385, "b": 719.0675659179688, "coord_origin": "TOPLEFT"}, "confidence": 0.9783982038497925, "cells": [{"id": 25, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and ", "bbox": {"l": 136.8, "t": 685.7281, "r": 504.44669, "b": 694.941101, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "maintained by the system. These global variables can be used to identify attributes of the ", "bbox": {"l": 136.8, "t": 697.727905, "r": 532.3385, "b": 706.94091, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "database connection and used as part of the RCAC logic.", "bbox": {"l": 136.8, "t": 709.727715, "r": 391.38257, "b": 718.94072, "coord_origin": "TOPLEFT"}}]}, "text": "IBM DB2 for i supports nine different built-in global variables that are read only and maintained by the system. These global variables can be used to identify attributes of the database connection and used as part of the RCAC logic."}, {"label": "table", "id": 14, "page_no": 10, "cluster": {"id": 14, "label": "table", "bbox": {"l": 134.54624938964844, "t": 103.41889190673828, "r": 542.0460815429688, "b": 204.2716064453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9731298685073853, "cells": [{"id": 28, "text": "Special register", "bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Corresponding value", "bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "USER or", "bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 178.26361, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "SESSION_USER", "bbox": {"l": 142.80002, "t": 140.53864, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "The effective user of the thread excluding adopted authority.", "bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "CURRENT_USER", "bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "The effective user of the thread including adopted authority. When no adopted ", "bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "authority is present, this has the same value as USER.", "bbox": {"l": 230.22061, "t": 170.53832999999997, "r": 447.36533, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "SYSTEM_USER", "bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "The authorization ID that initiated the connection.", "bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl", "fcel", "fcel", "nl"], "num_rows": 4, "num_cols": 2, "table_cells": [{"bbox": {"l": 142.8, "t": 110.53801999999985, "r": 209.67091, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Special register", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 230.18912000000003, "t": 110.53801999999985, "r": 319.93527, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Corresponding value", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80002, "t": 129.49834999999996, "r": 212.70122, "b": 148.86359000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "USER or SESSION_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.21973000000003, "t": 129.49834999999996, "r": 467.99069000000003, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread excluding adopted authority.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.80003, "t": 159.55835000000002, "r": 216.63962999999998, "b": 167.88329999999996, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CURRENT_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.19814, "t": 159.55835000000002, "r": 535.65082, "b": 178.86328000000003, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The effective user of the thread including adopted authority. When no adopted authority is present, this has the same value as USER.", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 142.8009, "t": 189.55804, "r": 209.7357, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "SYSTEM_USER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 230.2449, "t": 189.55804, "r": 425.64569, "b": 197.88300000000004, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "The authorization ID that initiated the connection.", "column_header": false, "row_header": false, "row_section": false}]}, {"label": "picture", "id": 15, "page_no": 10, "cluster": {"id": 15, "label": "picture", "bbox": {"l": 135.64837646484375, "t": 384.1737060546875, "r": 301.2367248535156, "b": 594.7566528320312, "coord_origin": "TOPLEFT"}, "confidence": 0.7221464514732361, "cells": [{"id": 39, "text": "Signed on as ALICE", "bbox": {"l": 140.7323, "t": 386.98453, "r": 216.40009, "b": 395.49527, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 410.87441999999993, "r": 191.70256, "b": 419.38516, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 422.81934, "r": 232.56117, "b": 431.33008, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CALL proc1", "bbox": {"l": 138.476, "t": 446.70923000000005, "r": 183.26944, "b": 455.21997, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "P1", "bbox": {"l": 148.4301, "t": 473.58524, "r": 184.17328, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "Proc1:", "bbox": {"l": 148.4301, "t": 473.58524, "r": 174.05859, "b": 482.09598, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "Owner = JOE", "bbox": {"l": 157.52185, "t": 485.53015, "r": 209.103, "b": 494.04089, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "SET OPTION USRPRF=*OWNER", "bbox": {"l": 157.52185, "t": 497.47507, "r": 281.68927, "b": 505.98581, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "USER = ALICE", "bbox": {"l": 148.4301, "t": 521.36493, "r": 201.65666, "b": 529.87567, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "CURRENT USER = JOE", "bbox": {"l": 148.4301, "t": 533.30984, "r": 234.57686999999999, "b": 541.82059, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "USER = ALICE", "bbox": {"l": 138.476, "t": 566.15842, "r": 191.70256, "b": 574.66917, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "CURRENT USER = ALICE", "bbox": {"l": 138.476, "t": 578.10333, "r": 232.56117, "b": 586.61409, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 10, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5751037597656, "t": 754.7044067382812, "r": 523.60162, "b": 764.0689086914062, "coord_origin": "TOPLEFT"}, "confidence": 0.9557498693466187, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 10, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 536.0416870117188, "t": 754.2877197265625, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9130511283874512, "cells": [{"id": 1, "text": "19", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "19"}]}}, {"page_no": 11, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {"12": {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "body": [{"label": "text", "id": 2, "page_no": 11, "cluster": {"id": 2, "label": "text", "bbox": {"l": 135.74647521972656, "t": 70.67481994628906, "r": 342.54773, "b": 80.84661102294922, "coord_origin": "TOPLEFT"}, "confidence": 0.8370974659919739, "cells": [{"id": 2, "text": "Table 3-2 lists the nine built-in global variables.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 342.54773, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 lists the nine built-in global variables."}, {"label": "caption", "id": 3, "page_no": 11, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.800003, "t": 92.83466339111328, "r": 201.82247924804688, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.913235604763031, "cells": [{"id": 3, "text": "Table 3-2 Built-in global variables", "bbox": {"l": 64.800003, "t": 93.49805000000003, "r": 201.18147, "b": 101.82299999999998, "coord_origin": "TOPLEFT"}}]}, "text": "Table 3-2 Built-in global variables"}, {"label": "section_header", "id": 4, "page_no": 11, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.34713745117188, "t": 320.619140625, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}, "confidence": 0.9645339846611023, "cells": [{"id": 4, "text": "3.3", "bbox": {"l": 64.800003, "t": 322.20071, "r": 87.318192, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "VERIFY_GROUP_FOR_USER function", "bbox": {"l": 91.821815, "t": 322.20071, "r": 384.36389, "b": 336.96371000000005, "coord_origin": "TOPLEFT"}}]}, "text": "3.3 VERIFY_GROUP_FOR_USER function"}, {"label": "text", "id": 5, "page_no": 11, "cluster": {"id": 5, "label": "text", "bbox": {"l": 135.8567352294922, "t": 353.8623962402344, "r": 547.23474, "b": 436.295166015625, "coord_origin": "TOPLEFT"}, "confidence": 0.9864333868026733, "cells": [{"id": 6, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily ", "bbox": {"l": 136.8, "t": 354.52872, "r": 542.83539, "b": 363.7417, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "intended for use with RCAC permissions and masks, it can be used in other SQL statements. ", "bbox": {"l": 136.8, "t": 366.52853, "r": 547.14783, "b": 375.74152, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "The first parameter must be one of these three special registers: SESSION_USER, USER, or ", "bbox": {"l": 136.8, "t": 378.52835, "r": 547.15106, "b": 387.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "CURRENT_USER. The second and subsequent parameters are a list of user or group ", "bbox": {"l": 136.80002, "t": 390.52817, "r": 520.62958, "b": 399.74115000000006, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "profiles. Each of these values must be 1 - 10 characters in length. These values are not ", "bbox": {"l": 136.80002, "t": 402.52798, "r": 524.88824, "b": 411.74097, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "validated for their existence, which means that you can specify the names of user profiles that ", "bbox": {"l": 136.80002, "t": 414.5278, "r": 547.23474, "b": 423.7407799999999, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "do not exist without receiving any kind of error.", "bbox": {"l": 136.80002, "t": 426.52762, "r": 342.04672, "b": 435.74060000000003, "coord_origin": "TOPLEFT"}}]}, "text": "The VERIFY_GROUP_FOR_USER function was added in IBM i 7.2. Although it is primarily intended for use with RCAC permissions and masks, it can be used in other SQL statements. The first parameter must be one of these three special registers: SESSION_USER, USER, or CURRENT_USER. The second and subsequent parameters are a list of user or group profiles. Each of these values must be 1 - 10 characters in length. These values are not validated for their existence, which means that you can specify the names of user profiles that do not exist without receiving any kind of error."}, {"label": "text", "id": 6, "page_no": 11, "cluster": {"id": 6, "label": "text", "bbox": {"l": 136.01950073242188, "t": 447.4029541015625, "r": 547.25739, "b": 481.70004, "coord_origin": "TOPLEFT"}, "confidence": 0.9807308912277222, "cells": [{"id": 13, "text": "If a special register value is in the list of user profiles or it is a member of a group profile ", "bbox": {"l": 136.80002, "t": 448.48743, "r": 525.1474, "b": 457.70041, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "included in the list, the function returns a long integer value of 1. Otherwise, it returns a value ", "bbox": {"l": 136.80002, "t": 460.48724, "r": 547.25739, "b": 469.70023, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "of 0. It never returns the null value.", "bbox": {"l": 136.80002, "t": 472.48706, "r": 289.84335, "b": 481.70004, "coord_origin": "TOPLEFT"}}]}, "text": "If a special register value is in the list of user profiles or it is a member of a group profile included in the list, the function returns a long integer value of 1. Otherwise, it returns a value of 0. It never returns the null value."}, {"label": "text", "id": 7, "page_no": 11, "cluster": {"id": 7, "label": "text", "bbox": {"l": 136.42428588867188, "t": 493.1253662109375, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}, "confidence": 0.9237534403800964, "cells": [{"id": 16, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:", "bbox": {"l": 136.80002, "t": 494.50662, "r": 458.44525000000004, "b": 503.7196, "coord_origin": "TOPLEFT"}}]}, "text": "Here is an example of using the VERIFY_GROUP_FOR_USER function:"}, {"label": "list_item", "id": 8, "page_no": 11, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 136.80002, "t": 510.5052795410156, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}, "confidence": 0.9338629841804504, "cells": [{"id": 17, "text": "1.", "bbox": {"l": 136.80002, "t": 511.5462, "r": 145.09804, "b": 520.75919, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "There are user profiles for MGR, JANE, JUDY, and TONY.", "bbox": {"l": 147.86403, "t": 511.5462, "r": 406.07751, "b": 520.75919, "coord_origin": "TOPLEFT"}}]}, "text": "1. There are user profiles for MGR, JANE, JUDY, and TONY."}, {"label": "list_item", "id": 9, "page_no": 11, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 135.8521728515625, "t": 527.8382568359375, "r": 396.98816, "b": 538.1942749023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9514460563659668, "cells": [{"id": 19, "text": "2.", "bbox": {"l": 136.80002, "t": 528.5260000000001, "r": 145.23297, "b": 537.739, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "The user profile JANE specifies a group profile of MGR.", "bbox": {"l": 148.04396, "t": 528.5260000000001, "r": 396.98816, "b": 537.739, "coord_origin": "TOPLEFT"}}]}, "text": "2. The user profile JANE specifies a group profile of MGR."}, {"label": "list_item", "id": 10, "page_no": 11, "cluster": {"id": 10, "label": "list_item", "bbox": {"l": 136.08595275878906, "t": 544.642333984375, "r": 536.5686, "b": 566.71861, "coord_origin": "TOPLEFT"}, "confidence": 0.951230525970459, "cells": [{"id": 21, "text": "3.", "bbox": {"l": 136.80002, "t": 545.50581, "r": 145.18951, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "If a user is connected to the server using user profile JANE, all of the following function ", "bbox": {"l": 147.98601, "t": 545.50581, "r": 536.5686, "b": 554.71881, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "invocations return a value of 1:", "bbox": {"l": 151.20018, "t": 557.50562, "r": 286.84641, "b": 566.71861, "coord_origin": "TOPLEFT"}}]}, "text": "3. If a user is connected to the server using user profile JANE, all of the following function invocations return a value of 1:"}, {"label": "code", "id": 11, "page_no": 11, "cluster": {"id": 11, "label": "code", "bbox": {"l": 149.8811798095703, "t": 574.31591796875, "r": 451.01605, "b": 641.9093627929688, "coord_origin": "TOPLEFT"}, "confidence": 0.7066468000411987, "cells": [{"id": 24, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR')", "bbox": {"l": 151.20018, "t": 574.69458, "r": 366.05725, "b": 583.46933, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR')", "bbox": {"l": 151.20018, "t": 586.69438, "r": 406.01678, "b": 595.46913, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE')", "bbox": {"l": 151.20018, "t": 598.69418, "r": 451.01605, "b": 607.46893, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "The following function invocation returns a value of 0:", "bbox": {"l": 151.20018, "t": 615.5246, "r": 385.87271, "b": 624.73759, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')", "bbox": {"l": 151.20018, "t": 632.65381, "r": 411.05655, "b": 641.4285600000001, "coord_origin": "TOPLEFT"}}]}, "text": "VERIFY_GROUP_FOR_USER (CURRENT_USER, 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR') VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JANE', 'MGR', 'STEVE') The following function invocation returns a value of 0: VERIFY_GROUP_FOR_USER (CURRENT_USER, 'JUDY', 'TONY')"}, {"label": "table", "id": 12, "page_no": 11, "cluster": {"id": 12, "label": "table", "bbox": {"l": 63.556331634521484, "t": 104.23389434814453, "r": 548.5687255859375, "b": 296.2246398925781, "coord_origin": "TOPLEFT"}, "confidence": 0.9868634939193726, "cells": [{"id": 29, "text": "Global variable", "bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "Type", "bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Description", "bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CLIENT_HOST", "bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "VARCHAR(255)", "bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Host name of the current client as returned by the system", "bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "CLIENT_IPADDR", "bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "VARCHAR(128)", "bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "IP address of the current client as returned by the system", "bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "CLIENT_PORT ", "bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "INTEGER", "bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "Port used by the current client to communicate with the server", "bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "PACKAGE_NAME", "bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "VARCHAR(128)", "bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "Name of the currently running package", "bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "PACKAGE_SCHEMA", "bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "VARCHAR(128)", "bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "Schema name of the currently running package", "bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "PACKAGE_VERSION", "bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "VARCHAR(64)", "bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Version identifier of the currently running package", "bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ROUTINE_SCHEMA", "bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "VARCHAR(128)", "bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "Schema name of the currently running routine", "bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ROUTINE_SPECIFIC_NAME", "bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "VARCHAR(128)", "bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 55, "text": "Name of the currently running routine", "bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}}, {"id": 56, "text": "ROUTINE_TYPE", "bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 57, "text": "CHAR(1)", "bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}}, {"id": 58, "text": "Type of the currently running routine", "bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}}]}, "text": null, "otsl_seq": ["ched", "ched", "ched", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl", "fcel", "fcel", "fcel", "nl"], "num_rows": 10, "num_cols": 3, "table_cells": [{"bbox": {"l": 70.800003, "t": 110.53801999999985, "r": 134.99071, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "Global variable", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 202.8894, "t": 110.53801999999985, "r": 223.34641, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "Type", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 281.8248, "t": 110.53801999999985, "r": 331.3428, "b": 118.86298, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 0, "end_row_offset_idx": 1, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Description", "column_header": true, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800003, "t": 129.49834999999996, "r": 132.7209, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_HOST", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.89029, "t": 129.49834999999996, "r": 267.07651, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(255)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84732, "t": 129.49834999999996, "r": 510.17548, "b": 137.82330000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 1, "end_row_offset_idx": 2, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Host name of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 148.51806999999997, "r": 140.66522, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_IPADDR", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.87231, "t": 148.51806999999997, "r": 267.07739, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.84549, "t": 148.51806999999997, "r": 509.60583, "b": 156.84302000000002, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 2, "end_row_offset_idx": 3, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "IP address of the current client as returned by the system", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 167.53778, "r": 134.98264, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "CLIENT_PORT", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.90294, "t": 167.53778, "r": 242.80084, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "INTEGER", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79785, "t": 167.53778, "r": 527.59222, "b": 175.86273000000006, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 3, "end_row_offset_idx": 4, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Port used by the current client to communicate with the server", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 186.5575, "r": 143.50925, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.80576, "t": 186.5575, "r": 267.06937, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.85187, "t": 186.5575, "r": 436.57259999999997, "b": 194.88244999999995, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 4, "end_row_offset_idx": 5, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 205.51782000000003, "r": 156.01654, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.83545, "t": 205.51782000000003, "r": 267.08646, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87076, "t": 205.51782000000003, "r": 470.44678, "b": 213.84276999999997, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 5, "end_row_offset_idx": 6, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 224.53754000000004, "r": 157.89932, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "PACKAGE_VERSION", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.72472, "t": 224.53754000000004, "r": 261.98254, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(64)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.74924, "t": 224.53754000000004, "r": 478.8438100000001, "b": 232.86248999999998, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 6, "end_row_offset_idx": 7, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Version identifier of the currently running package", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 243.55724999999995, "r": 154.41992, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SCHEMA", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.79312, "t": 243.55724999999995, "r": 267.09274, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.87164, "t": 243.55724999999995, "r": 464.26022, "b": 251.8822, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 7, "end_row_offset_idx": 8, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Schema name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800018, "t": 262.51757999999995, "r": 188.43991, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_SPECIFIC_NAME", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.84441, "t": 262.51757999999995, "r": 267.03693, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "VARCHAR(128)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.80682, "t": 262.51757999999995, "r": 430.40045, "b": 270.84253, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 8, "end_row_offset_idx": 9, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Name of the currently running routine", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 70.800034, "t": 281.53726, "r": 139.43135, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 0, "end_col_offset_idx": 1, "text": "ROUTINE_TYPE", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 202.74635, "t": 281.53726, "r": 239.28996000000004, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 1, "end_col_offset_idx": 2, "text": "CHAR(1)", "column_header": false, "row_header": false, "row_section": false}, {"bbox": {"l": 281.79065, "t": 281.53726, "r": 425.09131, "b": 289.86227, "coord_origin": "TOPLEFT"}, "row_span": 1, "col_span": 1, "start_row_offset_idx": 9, "end_row_offset_idx": 10, "start_col_offset_idx": 2, "end_col_offset_idx": 3, "text": "Type of the currently running routine", "column_header": false, "row_header": false, "row_section": false}]}], "headers": [{"label": "page_footer", "id": 0, "page_no": 11, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.85088348388672, "t": 754.3745727539062, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9187920093536377, "cells": [{"id": 0, "text": "20 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "20"}, {"label": "page_footer", "id": 1, "page_no": 11, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.31550598144531, "t": 754.6971435546875, "r": 334.42142, "b": 763.9706420898438, "coord_origin": "TOPLEFT"}, "confidence": 0.9505078196525574, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 12, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}, {"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "body": [{"label": "text", "id": 2, "page_no": 12, "cluster": {"id": 2, "label": "text", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 92.43304, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 2, "text": "RETURN", "bbox": {"l": 136.79959, "t": 71.65845000000002, "r": 166.73935, "b": 80.43322999999998, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "CASE", "bbox": {"l": 136.79959, "t": 83.65826000000004, "r": 156.77934, "b": 92.43304, "coord_origin": "TOPLEFT"}}]}, "text": "RETURN CASE"}, {"label": "code", "id": 3, "page_no": 12, "cluster": {"id": 3, "label": "code", "bbox": {"l": 136.79959, "t": 91.76913452148438, "r": 521.57428, "b": 261.5705871582031, "coord_origin": "TOPLEFT"}, "confidence": 0.778520941734314, "cells": [{"id": 4, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1", "bbox": {"l": 147.26993, "t": 95.65808000000015, "r": 466.61502, "b": 104.43286000000012, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 107.65790000000004, "r": 311.69717, "b": 116.43268, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 131.65752999999995, "r": 436.61547999999993, "b": 140.43231000000003, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "AND SESSION_USER = EMPLOYEES . USER_ID", "bbox": {"l": 147.54245, "t": 143.65734999999995, "r": 351.65668, "b": 152.43213000000003, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "THEN EMPLOYEES . DATE_OF_BIRTH", "bbox": {"l": 147.73068, "t": 155.65716999999995, "r": 311.69717, "b": 164.43195000000003, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 147.31944, "t": 179.65679999999998, "r": 436.61547999999993, "b": 188.43158000000005, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID", "bbox": {"l": 147.52335, "t": 191.65661999999998, "r": 356.63669, "b": 200.43140000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "THEN ( 9999 || '-' ||", "bbox": {"l": 147.63832, "t": 203.65643, "r": 261.44492, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-'", "bbox": {"l": 272.28363, "t": 203.65643, "r": 499.89682, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "||", "bbox": {"l": 510.73557, "t": 203.65643, "r": 521.57428, "b": 212.43120999999996, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "DAY (EMPLOYEES.DATE_OF_BIRTH ))", "bbox": {"l": 160.78555, "t": 215.65625, "r": 346.6767, "b": 224.43102999999996, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "ELSE NULL", "bbox": {"l": 149.51941, "t": 227.65607, "r": 206.75861, "b": 236.43084999999996, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": " END", "bbox": {"l": 136.79959, "t": 239.65588000000002, "r": 156.77934, "b": 248.43066, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": " ENABLE ;", "bbox": {"l": 136.79959, "t": 251.65570000000002, "r": 186.7191, "b": 260.43048, "coord_origin": "TOPLEFT"}}]}, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR', 'EMP' ) = 1 THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . DATE_OF_BIRTH WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 9999 || '-' || MONTH ( EMPLOYEES . DATE_OF_BIRTH ) || '-' || DAY (EMPLOYEES.DATE_OF_BIRTH )) ELSE NULL END ENABLE ;"}, {"label": "list_item", "id": 4, "page_no": 12, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 135.86044311523438, "t": 274.4537353515625, "r": 547.21222, "b": 296.77191162109375, "coord_origin": "TOPLEFT"}, "confidence": 0.8678946495056152, "cells": [{"id": 18, "text": "2.", "bbox": {"l": 136.79959, "t": 275.50591999999995, "r": 145.18994, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "The other column to mask in this example is the TAX_ID information. In this example, the ", "bbox": {"l": 147.98672, "t": 275.50591999999995, "r": 547.21222, "b": 284.7189, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "rules to enforce include the following ones:", "bbox": {"l": 151.19977, "t": 287.50574, "r": 339.37903, "b": 296.71871999999996, "coord_origin": "TOPLEFT"}}]}, "text": "2. The other column to mask in this example is the TAX_ID information. In this example, the rules to enforce include the following ones:"}, {"label": "list_item", "id": 5, "page_no": 12, "cluster": {"id": 5, "label": "list_item", "bbox": {"l": 151.1599578857422, "t": 303.3277282714844, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}, "confidence": 0.9461130499839783, "cells": [{"id": 21, "text": "-", "bbox": {"l": 152.0394, "t": 304.48553000000004, "r": 157.61201, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Human Resources can see the unmasked TAX_ID of the employees.", "bbox": {"l": 165.59894, "t": 304.48553000000004, "r": 469.1528, "b": 313.69852000000003, "coord_origin": "TOPLEFT"}}]}, "text": "-Human Resources can see the unmasked TAX_ID of the employees."}, {"label": "list_item", "id": 6, "page_no": 12, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 151.2740936279297, "t": 320.54925537109375, "r": 403.95953, "b": 330.8575439453125, "coord_origin": "TOPLEFT"}, "confidence": 0.9467734694480896, "cells": [{"id": 23, "text": "-", "bbox": {"l": 152.0394, "t": 321.52512, "r": 157.60504, "b": 330.7381, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Employees can see only their own unmasked TAX_ID.", "bbox": {"l": 165.59894, "t": 321.52512, "r": 403.95953, "b": 330.7381, "coord_origin": "TOPLEFT"}}]}, "text": "-Employees can see only their own unmasked TAX_ID."}, {"label": "list_item", "id": 7, "page_no": 12, "cluster": {"id": 7, "label": "list_item", "bbox": {"l": 151.4427947998047, "t": 337.3158264160156, "r": 545.16846, "b": 359.71771, "coord_origin": "TOPLEFT"}, "confidence": 0.9705167412757874, "cells": [{"id": 25, "text": "-", "bbox": {"l": 152.0394, "t": 338.50491, "r": 157.57019, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "Managers see a masked version of TAX_ID with the first five characters replaced with ", "bbox": {"l": 165.59894, "t": 338.50491, "r": 545.16846, "b": 347.7179, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "the X character (for example, XXX-XX-1234).", "bbox": {"l": 165.59894, "t": 350.50473, "r": 364.67947, "b": 359.71771, "coord_origin": "TOPLEFT"}}]}, "text": "-Managers see a masked version of TAX_ID with the first five characters replaced with the X character (for example, XXX-XX-1234)."}, {"label": "list_item", "id": 8, "page_no": 12, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 151.51747131347656, "t": 366.6339111328125, "r": 529.46362, "b": 377.1689147949219, "coord_origin": "TOPLEFT"}, "confidence": 0.9469640254974365, "cells": [{"id": 28, "text": "-", "bbox": {"l": 152.0394, "t": 367.48453, "r": 157.59309, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX.", "bbox": {"l": 165.59995, "t": 367.48453, "r": 529.46362, "b": 376.6975100000001, "coord_origin": "TOPLEFT"}}]}, "text": "-Any other person sees the entire TAX_ID as masked, for example, XXX-XX-XXXX."}, {"label": "list_item", "id": 9, "page_no": 12, "cluster": {"id": 9, "label": "list_item", "bbox": {"l": 150.69093322753906, "t": 383.80133056640625, "r": 530.0603, "b": 394.17559814453125, "coord_origin": "TOPLEFT"}, "confidence": 0.7003507614135742, "cells": [{"id": 30, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9.", "bbox": {"l": 151.19978, "t": 384.52411, "r": 530.0603, "b": 393.73709, "coord_origin": "TOPLEFT"}}]}, "text": "To implement this column mask, run the SQL statement that is shown in Example 3-9."}, {"label": "caption", "id": 10, "page_no": 12, "cluster": {"id": 10, "label": "caption", "bbox": {"l": 136.25662231445312, "t": 405.446044921875, "r": 352.31475830078125, "b": 415.0381164550781, "coord_origin": "TOPLEFT"}, "confidence": 0.8488205075263977, "cells": [{"id": 31, "text": "Example 3-9 Creating a mask on the TAX_ID column", "bbox": {"l": 136.8, "t": 406.51801, "r": 351.9873, "b": 414.84302, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-9 Creating a mask on the TAX_ID column"}, {"label": "code", "id": 11, "page_no": 12, "cluster": {"id": 11, "label": "code", "bbox": {"l": 135.95343017578125, "t": 418.5181884765625, "r": 535.87548828125, "b": 688.5432739257812, "coord_origin": "TOPLEFT"}, "confidence": 0.8411229848861694, "cells": [{"id": 32, "text": "CREATE MASK", "bbox": {"l": 136.8, "t": 423.67810000000003, "r": 192.91296, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ", "bbox": {"l": 203.11533, "t": 423.67810000000003, "r": 381.65659, "b": 432.45287999999994, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "ON", "bbox": {"l": 136.8, "t": 435.67792, "r": 148.54184, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "HR_SCHEMA.EMPLOYEES AS EMPLOYEES ", "bbox": {"l": 177.89645, "t": 435.67792, "r": 371.63684, "b": 444.45270000000005, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "FOR COLUMN", "bbox": {"l": 136.8, "t": 447.67773, "r": 199.25916, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "TAX_ID", "bbox": {"l": 211.75098, "t": 447.67773, "r": 249.22647, "b": 456.45251, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "RETURN ", "bbox": {"l": 136.8, "t": 459.67755, "r": 176.75952, "b": 468.45233, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "CASE ", "bbox": {"l": 136.8, "t": 471.67737, "r": 161.75977, "b": 480.45215, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1", "bbox": {"l": 152.84189, "t": 483.67719, "r": 441.59589, "b": 492.45197, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 495.677, "r": 291.7178, "b": 504.45178, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 ", "bbox": {"l": 152.80757, "t": 519.67661, "r": 451.6156, "b": 528.45139, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "AND SESSION_USER = EMPLOYEES . USER_ID ", "bbox": {"l": 153.21835, "t": 531.67642, "r": 366.65683, "b": 540.45117, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "THEN EMPLOYEES . TAX_ID", "bbox": {"l": 154.09363, "t": 543.6762200000001, "r": 286.67804, "b": 552.45097, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1", "bbox": {"l": 152.82599, "t": 567.67583, "r": 446.63561999999996, "b": 576.45058, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "AND SESSION_USER <> EMPLOYEES . USER_ID ", "bbox": {"l": 153.18398, "t": 579.67563, "r": 371.63684, "b": 588.45038, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) )", "bbox": {"l": 152.60088, "t": 591.67543, "r": 526.55469, "b": 600.45018, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 ", "bbox": {"l": 152.80757, "t": 615.67505, "r": 451.6156, "b": 624.4498, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "THEN EMPLOYEES . TAX_ID ", "bbox": {"l": 154.01309, "t": 627.67485, "r": 291.7178, "b": 636.4496, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 154.5134, "t": 651.67447, "r": 266.69827, "b": 660.44922, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "END", "bbox": {"l": 136.8, "t": 663.67427, "r": 157.7877, "b": 672.44904, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ENABLE ;", "bbox": {"l": 136.8, "t": 675.67409, "r": 181.73952, "b": 684.44884, "coord_origin": "TOPLEFT"}}]}, "text": "CREATE MASK HR_SCHEMA.MASK_TAX_ID_ON_EMPLOYEES ON HR_SCHEMA.EMPLOYEES AS EMPLOYEES FOR COLUMN TAX_ID RETURN CASE WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'HR' ) = 1 THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER = EMPLOYEES . USER_ID THEN EMPLOYEES . TAX_ID WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'MGR' ) = 1 AND SESSION_USER <> EMPLOYEES . USER_ID THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( EMPLOYEES . TAX_ID , 8 , 4 ) ) WHEN VERIFY_GROUP_FOR_USER ( SESSION_USER , 'EMP' ) = 1 THEN EMPLOYEES . TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 12, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 344.5617370605469, "t": 754.6708374023438, "r": 523.60162, "b": 764.1358032226562, "coord_origin": "TOPLEFT"}, "confidence": 0.9556928277015686, "cells": [{"id": 0, "text": "Chapter 3. Row and Column Access Control ", "bbox": {"l": 344.94, "t": 755.538002, "r": 523.60162, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 3. Row and Column Access Control"}, {"label": "page_footer", "id": 1, "page_no": 12, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.6422729492188, "t": 754.1753540039062, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9105784296989441, "cells": [{"id": 1, "text": "27", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "27"}]}}, {"page_no": 13, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 13, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.14459228515625, "t": 70.61093139648438, "r": 449.9523899999999, "b": 81.22673034667969, "coord_origin": "TOPLEFT"}, "confidence": 0.8751051425933838, "cells": [{"id": 2, "text": "3.", "bbox": {"l": 136.8, "t": 71.50867000000005, "r": 145.22156, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 3-10 shows the masks that are created in the HR_SCHEMA.", "bbox": {"l": 148.02872, "t": 71.50867000000005, "r": 449.9523899999999, "b": 80.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "3. Figure 3-10 shows the masks that are created in the HR_SCHEMA."}, {"label": "caption", "id": 3, "page_no": 13, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 64.17350769042969, "t": 172.7456512451172, "r": 294.42578125, "b": 181.8983612060547, "coord_origin": "TOPLEFT"}, "confidence": 0.944426953792572, "cells": [{"id": 4, "text": "Figure 3-10 Column masks shown in System i Navigator", "bbox": {"l": 64.800003, "t": 173.53801999999996, "r": 293.13809, "b": 181.86298, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-10 Column masks shown in System i Navigator"}, {"label": "section_header", "id": 4, "page_no": 13, "cluster": {"id": 4, "label": "section_header", "bbox": {"l": 64.29059600830078, "t": 201.6618194580078, "r": 203.98521, "b": 214.99534606933594, "coord_origin": "TOPLEFT"}, "confidence": 0.9645015001296997, "cells": [{"id": 5, "text": "3.6.6", "bbox": {"l": 64.800003, "t": 202.37469, "r": 94.275139, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "Activating RCAC", "bbox": {"l": 97.959534, "t": 202.37469, "r": 203.98521, "b": 214.36273000000006, "coord_origin": "TOPLEFT"}}]}, "text": "3.6.6 Activating RCAC"}, {"label": "text", "id": 5, "page_no": 13, "cluster": {"id": 5, "label": "text", "bbox": {"l": 136.1686553955078, "t": 228.097412109375, "r": 547.22565, "b": 262.4639587402344, "coord_origin": "TOPLEFT"}, "confidence": 0.9768573045730591, "cells": [{"id": 7, "text": "Now that you have created the row permission and the two column masks, RCAC must be ", "bbox": {"l": 136.8, "t": 228.52868999999998, "r": 537.09131, "b": 237.74170000000004, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "activated. The row permission and the two column masks are enabled (last clause in the ", "bbox": {"l": 136.8, "t": 240.5285, "r": 529.20422, "b": 249.74152000000004, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "scripts), but now you must activate RCAC on the table. To do so, complete the following steps:", "bbox": {"l": 136.8, "t": 252.52832, "r": 547.22565, "b": 261.74132999999995, "coord_origin": "TOPLEFT"}}]}, "text": "Now that you have created the row permission and the two column masks, RCAC must be activated. The row permission and the two column masks are enabled (last clause in the scripts), but now you must activate RCAC on the table. To do so, complete the following steps:"}, {"label": "list_item", "id": 6, "page_no": 13, "cluster": {"id": 6, "label": "list_item", "bbox": {"l": 136.5933074951172, "t": 268.52996826171875, "r": 409.47888, "b": 278.8722229003906, "coord_origin": "TOPLEFT"}, "confidence": 0.9059442281723022, "cells": [{"id": 10, "text": "1.", "bbox": {"l": 136.8, "t": 269.50811999999996, "r": 145.32378, "b": 278.72113, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Run the SQL statements that are shown in Example 3-10.", "bbox": {"l": 148.16501, "t": 269.50811999999996, "r": 409.47888, "b": 278.72113, "coord_origin": "TOPLEFT"}}]}, "text": "1. Run the SQL statements that are shown in Example 3-10."}, {"label": "section_header", "id": 7, "page_no": 13, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 136.31597900390625, "t": 290.4278564453125, "r": 375.29099, "b": 300.4970703125, "coord_origin": "TOPLEFT"}, "confidence": 0.6570106148719788, "cells": [{"id": 12, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table ", "bbox": {"l": 136.8, "t": 291.55798, "r": 375.29099, "b": 299.88300000000004, "coord_origin": "TOPLEFT"}}]}, "text": "Example 3-10 Activating RCAC on the EMPLOYEES table"}, {"label": "list_item", "id": 8, "page_no": 13, "cluster": {"id": 8, "label": "list_item", "bbox": {"l": 135.7803192138672, "t": 307.09222412109375, "r": 376.67661, "b": 318.0027160644531, "coord_origin": "TOPLEFT"}, "confidence": 0.6002406477928162, "cells": [{"id": 13, "text": "/*", "bbox": {"l": 136.8, "t": 308.65811, "r": 147.22942, "b": 317.43289, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "Active Row Access Control (permissions) */", "bbox": {"l": 157.65884, "t": 308.65811, "r": 376.67661, "b": 317.43289, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Row Access Control (permissions) */"}, {"label": "text", "id": 9, "page_no": 13, "cluster": {"id": 9, "label": "text", "bbox": {"l": 136.8, "t": 320.65793, "r": 354.86963, "b": 365.43216, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 15, "text": "/*", "bbox": {"l": 136.8, "t": 320.65793, "r": 147.70349, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "Active Column Access Control (masks)", "bbox": {"l": 158.60696, "t": 320.65793, "r": 354.86963, "b": 329.43271, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "ALTER TABLE HR_SCHEMA.EMPLOYEES", "bbox": {"l": 136.8, "t": 332.65775, "r": 291.7178, "b": 341.43253, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ACTIVATE ROW ACCESS CONTROL", "bbox": {"l": 136.8, "t": 344.65756, "r": 271.67831, "b": 353.43234000000007, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "ACTIVATE COLUMN ACCESS CONTROL;", "bbox": {"l": 136.8, "t": 356.65738, "r": 291.7178, "b": 365.43216, "coord_origin": "TOPLEFT"}}]}, "text": "/* Active Column Access Control (masks) ALTER TABLE HR_SCHEMA.EMPLOYEES ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL;"}, {"label": "text", "id": 10, "page_no": 13, "cluster": {"id": 10, "label": "text", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 17, "text": "*/", "bbox": {"l": 365.77313, "t": 320.65793, "r": 376.67661, "b": 329.43271, "coord_origin": "TOPLEFT"}}]}, "text": "*/"}, {"label": "list_item", "id": 11, "page_no": 13, "cluster": {"id": 11, "label": "list_item", "bbox": {"l": 135.87640380859375, "t": 379.3264465332031, "r": 540.80145, "b": 413.72021, "coord_origin": "TOPLEFT"}, "confidence": 0.9449256658554077, "cells": [{"id": 21, "text": "2.", "bbox": {"l": 136.8, "t": 380.5076, "r": 145.14954, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from ", "bbox": {"l": 147.93271, "t": 380.5076, "r": 540.80145, "b": 389.72058, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "the main navigation pane of System i Navigator, click ", "bbox": {"l": 151.20013, "t": 392.50742, "r": 387.36169, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "Schemas", "bbox": {"l": 387.29993, "t": 392.50742, "r": 431.07614, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "\uf0ae", "bbox": {"l": 433.85992000000005, "t": 389.64889999999997, "r": 443.69043, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "HR_SCHEMA", "bbox": {"l": 446.51906999999994, "t": 392.50742, "r": 509.73618000000005, "b": 401.7203999999999, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "\uf0ae", "bbox": {"l": 512.5788, "t": 389.64889999999997, "r": 522.4093, "b": 401.83994, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Tables", "bbox": {"l": 151.19812, "t": 404.50723000000005, "r": 181.12892, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": ", right-click the ", "bbox": {"l": 181.79823, "t": 404.50723000000005, "r": 248.99638, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "EMPLOYEES", "bbox": {"l": 248.93860000000004, "t": 404.50723000000005, "r": 310.44357, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": " table, and click ", "bbox": {"l": 310.49835, "t": 404.50723000000005, "r": 381.53305, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "Definition", "bbox": {"l": 381.59882, "t": 404.50723000000005, "r": 427.68176, "b": 413.72021, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": ".", "bbox": {"l": 427.67877, "t": 404.50723000000005, "r": 430.4476599999999, "b": 413.72021, "coord_origin": "TOPLEFT"}}]}, "text": "2. Look at the definition of the EMPLOYEE table, as shown in Figure 3-11. To do this, from the main navigation pane of System i Navigator, click Schemas \uf0ae HR_SCHEMA \uf0ae Tables , right-click the EMPLOYEES table, and click Definition ."}, {"label": "caption", "id": 12, "page_no": 13, "cluster": {"id": 12, "label": "caption", "bbox": {"l": 64.33819580078125, "t": 648.241943359375, "r": 348.354736328125, "b": 657.4004516601562, "coord_origin": "TOPLEFT"}, "confidence": 0.9499983787536621, "cells": [{"id": 34, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator", "bbox": {"l": 64.800003, "t": 649.0378900000001, "r": 347.43054, "b": 657.3629, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 3-11 Selecting the EMPLOYEES table from System i Navigator"}, {"label": "picture", "id": 13, "page_no": 13, "cluster": {"id": 13, "label": "picture", "bbox": {"l": 63.98516845703125, "t": 427.9049987792969, "r": 530.0479125976562, "b": 646.1395874023438, "coord_origin": "TOPLEFT"}, "confidence": 0.9801459908485413, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 14, "page_no": 13, "cluster": {"id": 14, "label": "picture", "bbox": {"l": 63.801902770996094, "t": 95.38243103027344, "r": 547.11474609375, "b": 170.03213500976562, "coord_origin": "TOPLEFT"}, "confidence": 0.9635391235351562, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 13, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 63.84088897705078, "t": 754.3895874023438, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9162001013755798, "cells": [{"id": 0, "text": "28 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 78.402, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "28"}, {"label": "page_footer", "id": 1, "page_no": 13, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 93.28304290771484, "t": 754.72412109375, "r": 334.42142, "b": 763.943603515625, "coord_origin": "TOPLEFT"}, "confidence": 0.9540064334869385, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 93.420303, "t": 755.538002, "r": 334.42142, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 14, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}, {"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "body": [{"label": "list_item", "id": 2, "page_no": 14, "cluster": {"id": 2, "label": "list_item", "bbox": {"l": 136.00341796875, "t": 70.4630355834961, "r": 514.04858, "b": 104.82832336425781, "coord_origin": "TOPLEFT"}, "confidence": 0.9761855006217957, "cells": [{"id": 2, "text": "2.", "bbox": {"l": 136.79959, "t": 71.50903000000005, "r": 145.19554, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC ", "bbox": {"l": 147.9942, "t": 71.50903000000005, "r": 513.35919, "b": 80.72204999999985, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "enabled. It is clear that the implementation of the SQL statement is more complex ", "bbox": {"l": 151.19975, "t": 83.50885000000017, "r": 514.04858, "b": 92.72185999999999, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "because the row permission rule becomes part of the ", "bbox": {"l": 151.19975, "t": 95.50867000000005, "r": 389.64822, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "WHERE", "bbox": {"l": 389.57941, "t": 95.65808000000015, "r": 414.53918, "b": 104.48266999999998, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": " clause.", "bbox": {"l": 414.59991, "t": 95.50867000000005, "r": 448.8892200000001, "b": 104.72167999999999, "coord_origin": "TOPLEFT"}}]}, "text": "2. Figure 4-68 shows the Visual Explain of the same SQL statement, but with RCAC enabled. It is clear that the implementation of the SQL statement is more complex because the row permission rule becomes part of the WHERE clause."}, {"label": "caption", "id": 3, "page_no": 14, "cluster": {"id": 3, "label": "caption", "bbox": {"l": 135.9990692138672, "t": 480.2080078125, "r": 327.9913635253906, "b": 489.21875, "coord_origin": "TOPLEFT"}, "confidence": 0.9529653191566467, "cells": [{"id": 8, "text": "Figure 4-68 Visual Explain with RCAC enabled", "bbox": {"l": 136.8, "t": 480.55798, "r": 327.09329, "b": 488.883, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-68 Visual Explain with RCAC enabled"}, {"label": "list_item", "id": 4, "page_no": 14, "cluster": {"id": 4, "label": "list_item", "bbox": {"l": 136.2928924560547, "t": 505.9650573730469, "r": 547.23944, "b": 540.0134887695312, "coord_origin": "TOPLEFT"}, "confidence": 0.9766737818717957, "cells": [{"id": 9, "text": "3.", "bbox": {"l": 136.8, "t": 506.56863, "r": 145.17432, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "Compare the advised indexes that are provided by the Optimizer without RCAC and with ", "bbox": {"l": 147.96574, "t": 506.56863, "r": 543.63715, "b": 515.78162, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC ", "bbox": {"l": 151.20016, "t": 518.56845, "r": 547.23944, "b": 527.78143, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "enabled. The index being advised is for the ORDER BY clause.", "bbox": {"l": 151.20016, "t": 530.5682400000001, "r": 430.28333, "b": 539.78125, "coord_origin": "TOPLEFT"}}]}, "text": "3. Compare the advised indexes that are provided by the Optimizer without RCAC and with RCAC enabled. Figure 4-69 shows the index advice for the SQL statement without RCAC enabled. The index being advised is for the ORDER BY clause."}, {"label": "caption", "id": 5, "page_no": 14, "cluster": {"id": 5, "label": "caption", "bbox": {"l": 64.35660552978516, "t": 666.6797485351562, "r": 227.347412109375, "b": 675.9388427734375, "coord_origin": "TOPLEFT"}, "confidence": 0.9514287114143372, "cells": [{"id": 13, "text": "Figure 4-69 Index advice with no RCAC", "bbox": {"l": 64.800003, "t": 667.5179, "r": 227.10149, "b": 675.8429, "coord_origin": "TOPLEFT"}}]}, "text": "Figure 4-69 Index advice with no RCAC"}, {"label": "picture", "id": 6, "page_no": 14, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 136.5016632080078, "t": 119.2491226196289, "r": 545.4508666992188, "b": 477.5412292480469, "coord_origin": "TOPLEFT"}, "confidence": 0.9864527583122253, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "picture", "id": 7, "page_no": 14, "cluster": {"id": 7, "label": "picture", "bbox": {"l": 64.27847290039062, "t": 553.5813598632812, "r": 506.39263916015625, "b": 664.0870361328125, "coord_origin": "TOPLEFT"}, "confidence": 0.9797717928886414, "cells": []}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}], "headers": [{"label": "page_footer", "id": 0, "page_no": 14, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 214.30316162109375, "t": 754.7198486328125, "r": 523.59357, "b": 764.0086669921875, "coord_origin": "TOPLEFT"}, "confidence": 0.9557602405548096, "cells": [{"id": 0, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example ", "bbox": {"l": 214.8, "t": 755.538002, "r": 523.59357, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Chapter 4. Implementing Row and Column Access Control: Banking example"}, {"label": "page_footer", "id": 1, "page_no": 14, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 535.3654174804688, "t": 754.280029296875, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.9056527614593506, "cells": [{"id": 1, "text": "77", "bbox": {"l": 536.09998, "t": 754.848721, "r": 547.25916, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "77"}]}}, {"page_no": 15, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "body": [{"label": "code", "id": 2, "page_no": 15, "cluster": {"id": 2, "label": "code", "bbox": {"l": 62.60613250732422, "t": 69.35981750488281, "r": 500.69727, "b": 707.7635498046875, "coord_origin": "TOPLEFT"}, "confidence": 0.763217568397522, "cells": [{"id": 2, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 71.67296999999996, "r": 177.1194, "b": 79.60199, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 82.65295000000015, "r": 365.87817, "b": 90.58196999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) ", "bbox": {"l": 64.800308, "t": 93.63292999999999, "r": 392.81787, "b": 101.56195000000002, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 104.67322000000001, "r": 374.87817, "b": 112.60222999999996, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "THEN C . CUSTOMER_TAX_ID ", "bbox": {"l": 64.800308, "t": 115.65319999999997, "r": 177.1194, "b": 123.58220999999992, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "ELSE 'XXX-XX-XXXX' ", "bbox": {"l": 64.800308, "t": 126.63318000000015, "r": 150.1797, "b": 134.56219, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "END ", "bbox": {"l": 64.800308, "t": 137.67345999999998, "r": 96.240005, "b": 145.60248, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 148.65344000000005, "r": 124.14001, "b": 156.58245999999997, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 170.67377, "r": 460.25757, "b": 178.60278000000005, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 79.20031, "t": 181.65374999999995, "r": 272.45911, "b": 189.58276, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 192.69403, "r": 137.64001, "b": 200.62305000000003, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 203.67400999999995, "r": 361.37817, "b": 211.60303, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 214.65399000000002, "r": 249.0591, "b": 222.58300999999994, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 ", "bbox": {"l": 64.800308, "t": 225.69426999999996, "r": 365.87817, "b": 233.62329, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 236.67426, "r": 249.0591, "b": 244.60326999999995, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 247.65423999999996, "r": 374.87817, "b": 255.58325000000002, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ", "bbox": {"l": 64.800308, "t": 258.69452, "r": 249.0591, "b": 266.62354000000005, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "ELSE '*************' ", "bbox": {"l": 64.800308, "t": 269.67449999999997, "r": 159.1797, "b": 277.60352, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "END ", "bbox": {"l": 64.800308, "t": 280.65454, "r": 96.240005, "b": 288.58353, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 291.69485000000003, "r": 124.14001, "b": 299.62384, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 313.65485, "r": 428.81786999999997, "b": 321.58383, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "FOR COLUMN CUSTOMER_LOGIN_ID ", "bbox": {"l": 79.20031, "t": 324.69516, "r": 209.51941, "b": 332.62415, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 335.67517, "r": 137.64001, "b": 343.6041599999999, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 346.65518, "r": 361.37817, "b": 354.58417, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 357.69550000000004, "r": 186.1194, "b": 365.62448, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 368.67551, "r": 374.87817, "b": 376.60449, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "THEN C . CUSTOMER_LOGIN_ID ", "bbox": {"l": 64.800308, "t": 379.65552, "r": 186.1194, "b": 387.5845, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 390.69583, "r": 123.24001, "b": 398.62482, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "END ", "bbox": {"l": 64.800308, "t": 401.67584, "r": 96.240005, "b": 409.60482999999994, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 412.65585, "r": 124.14001, "b": 420.58484, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 434.67615, "r": 469.25757, "b": 442.60513, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 79.20031, "t": 445.65616000000006, "r": 249.95911, "b": 453.58514, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 456.6964699999999, "r": 137.64001, "b": 464.62546, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 467.67648, "r": 361.37817, "b": 475.60547, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 478.65649, "r": 226.5591, "b": 486.58548, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 489.69681, "r": 374.87817, "b": 497.62579, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "THEN C . CUSTOMER_SECURITY_QUESTION ", "bbox": {"l": 64.800308, "t": 500.67682, "r": 226.5591, "b": 508.6058, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 511.65683, "r": 123.24001, "b": 519.58582, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "END ", "bbox": {"l": 64.800308, "t": 522.69714, "r": 96.240005, "b": 530.62613, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 533.6771200000001, "r": 124.14001, "b": 541.60614, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C ", "bbox": {"l": 64.800308, "t": 555.69745, "r": 500.69727, "b": 563.62645, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 79.20031, "t": 566.6774399999999, "r": 281.3988, "b": 574.60645, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "RETURN CASE ", "bbox": {"l": 79.20031, "t": 577.65744, "r": 137.64001, "b": 585.58644, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 ", "bbox": {"l": 64.800308, "t": 588.6977400000001, "r": 361.37817, "b": 596.62674, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 599.67773, "r": 258.05908, "b": 607.60674, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 ", "bbox": {"l": 64.800308, "t": 610.65773, "r": 374.87817, "b": 618.58673, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ", "bbox": {"l": 64.800308, "t": 621.69803, "r": 258.05908, "b": 629.62703, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "ELSE '*****' ", "bbox": {"l": 64.800308, "t": 632.6780200000001, "r": 123.24001, "b": 640.60703, "coord_origin": "TOPLEFT"}}, {"id": 50, "text": "END ", "bbox": {"l": 64.800308, "t": 643.71832, "r": 96.240005, "b": 651.64732, "coord_origin": "TOPLEFT"}}, {"id": 51, "text": "ENABLE ; ", "bbox": {"l": 79.20031, "t": 654.69832, "r": 124.14001, "b": 662.62732, "coord_origin": "TOPLEFT"}}, {"id": 52, "text": "ALTER TABLE BANK_SCHEMA.CUSTOMERS ", "bbox": {"l": 64.800308, "t": 676.71861, "r": 226.5591, "b": 684.64761, "coord_origin": "TOPLEFT"}}, {"id": 53, "text": "ACTIVATE ROW ACCESS CONTROL ", "bbox": {"l": 79.20031, "t": 687.69862, "r": 214.01941, "b": 695.627617, "coord_origin": "TOPLEFT"}}, {"id": 54, "text": "ACTIVATE COLUMN ACCESS CONTROL ;", "bbox": {"l": 79.20031, "t": 698.678619, "r": 223.01941, "b": 706.60762, "coord_origin": "TOPLEFT"}}]}, "text": "THEN C . CUSTOMER_TAX_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN ( 'XXX-XX-' CONCAT QSYS2 . SUBSTR ( C . CUSTOMER_TAX_ID , 8 , 4 ) ) WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_TAX_ID ELSE 'XXX-XX-XXXX' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_DRIVERS_LICENSE_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_DRIVERS_LICENSE_NUMBER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'TELLER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_DRIVERS_LICENSE_NUMBER ELSE '*************' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_LOGIN_ID_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_LOGIN_ID RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_LOGIN_ID WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_LOGIN_ID ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION ELSE '*****' END ENABLE ; CREATE MASK BANK_SCHEMA.MASK_SECURITY_QUESTION_ANSWER_ON_CUSTOMERS ON BANK_SCHEMA.CUSTOMERS AS C FOR COLUMN CUSTOMER_SECURITY_QUESTION_ANSWER RETURN CASE WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'ADMIN' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER WHEN QSYS2 . VERIFY_GROUP_FOR_USER ( SESSION_USER , 'CUSTOMER' ) = 1 THEN C . CUSTOMER_SECURITY_QUESTION_ANSWER ELSE '*****' END ENABLE ; ALTER TABLE BANK_SCHEMA.CUSTOMERS ACTIVATE ROW ACCESS CONTROL ACTIVATE COLUMN ACCESS CONTROL ;"}], "headers": [{"label": "page_footer", "id": 0, "page_no": 15, "cluster": {"id": 0, "label": "page_footer", "bbox": {"l": 64.50080871582031, "t": 754.5338745117188, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}, "confidence": 0.8994000554084778, "cells": [{"id": 0, "text": "124 ", "bbox": {"l": 64.800003, "t": 754.848721, "r": 83.982002, "b": 764.06172, "coord_origin": "TOPLEFT"}}]}, "text": "124"}, {"label": "page_footer", "id": 1, "page_no": 15, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 98.63966369628906, "t": 754.71435546875, "r": 339.882080078125, "b": 764.0100708007812, "coord_origin": "TOPLEFT"}, "confidence": 0.9430771470069885, "cells": [{"id": 1, "text": "Row and Column Access Control Support in IBM DB2 for i", "bbox": {"l": 98.940002, "t": 755.538002, "r": 339.81958, "b": 763.863001, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}]}}, {"page_no": 16, "size": {"width": 612.0, "height": 792.0}, "cells": [], "predictions": {"layout": {"clusters": []}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [], "body": [], "headers": []}}, {"page_no": 17, "size": {"width": 612.0, "height": 792.0}, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}, {"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}, {"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}, {"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}, {"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}, {"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}, {"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}, {"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}, {"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "body": [{"label": "picture", "id": 0, "page_no": 17, "cluster": {"id": 0, "label": "picture", "bbox": {"l": 485.1698303222656, "t": 25.259197235107422, "r": 566.2962036132812, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}, "confidence": 0.9404253363609314, "cells": [{"id": 0, "text": "fi", "bbox": {"l": 558.11987, "t": 45.468689999999924, "r": 565.46039, "b": 54.68169999999998, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "text", "id": 2, "page_no": 17, "cluster": {"id": 2, "label": "text", "bbox": {"l": 466.3692626953125, "t": 247.39378356933594, "r": 559.80933, "b": 302.16061, "coord_origin": "TOPLEFT"}, "confidence": 0.8532671332359314, "cells": [{"id": 2, "text": "INTERNATIONAL ", "bbox": {"l": 467.3399999999999, "t": 247.71831999999995, "r": 559.80933, "b": 260.16052, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "TECHNICAL", "bbox": {"l": 467.3399999999999, "t": 261.75842, "r": 529.50208, "b": 274.20061999999996, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "SUPPORT", "bbox": {"l": 467.3399999999999, "t": 275.73839999999996, "r": 518.93317, "b": 288.1806, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "ORGANIZATION", "bbox": {"l": 467.3399999999999, "t": 289.71841, "r": 550.7475, "b": 302.16061, "coord_origin": "TOPLEFT"}}]}, "text": "INTERNATIONAL TECHNICAL SUPPORT ORGANIZATION"}, {"label": "text", "id": 3, "page_no": 17, "cluster": {"id": 3, "label": "text", "bbox": {"l": 466.3262939453125, "t": 351.4299011230469, "r": 587.38916, "b": 386.47198, "coord_origin": "TOPLEFT"}, "confidence": 0.7157137989997864, "cells": [{"id": 6, "text": "BUILDING TECHNICAL ", "bbox": {"l": 467.3399999999999, "t": 351.79199, "r": 571.70758, "b": 362.47198, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "INFORMATION BASED ON ", "bbox": {"l": 467.3399999999999, "t": 363.79199, "r": 587.38916, "b": 374.47198, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "PRACTICAL EXPERIENCE", "bbox": {"l": 467.3399999999999, "t": 375.79199, "r": 582.5556, "b": 386.47198, "coord_origin": "TOPLEFT"}}]}, "text": "BUILDING TECHNICAL INFORMATION BASED ON PRACTICAL EXPERIENCE"}, {"label": "text", "id": 4, "page_no": 17, "cluster": {"id": 4, "label": "text", "bbox": {"l": 466.1037292480469, "t": 398.81231689453125, "r": 587.52051, "b": 541.63406, "coord_origin": "TOPLEFT"}, "confidence": 0.9518945813179016, "cells": [{"id": 9, "text": "IBM Redbooks are developed ", "bbox": {"l": 467.3399999999999, "t": 399.8602900000001, "r": 587.46674, "b": 409.63251, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "by the IBM International ", "bbox": {"l": 467.3399999999999, "t": 410.90067, "r": 566.34229, "b": 420.67285, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "Technical Support ", "bbox": {"l": 467.3399999999999, "t": 421.88068, "r": 543.20404, "b": 431.65289, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "Organization. Experts from ", "bbox": {"l": 467.3399999999999, "t": 432.8606899999999, "r": 577.76697, "b": 442.63287, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "IBM, Customers and Partners ", "bbox": {"l": 467.3399999999999, "t": 443.90106, "r": 587.40948, "b": 453.67328, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "from around the world create ", "bbox": {"l": 467.3399999999999, "t": 454.88107, "r": 587.52051, "b": 464.65326, "coord_origin": "TOPLEFT"}}, {"id": 15, "text": "timely technical information ", "bbox": {"l": 467.3399999999999, "t": 465.86108, "r": 582.67505, "b": 475.6333, "coord_origin": "TOPLEFT"}}, {"id": 16, "text": "based on realistic scenarios. ", "bbox": {"l": 467.3399999999999, "t": 476.90146, "r": 585.46722, "b": 486.67365, "coord_origin": "TOPLEFT"}}, {"id": 17, "text": "Specific recommendations ", "bbox": {"l": 467.3399999999999, "t": 487.88147, "r": 577.70874, "b": 497.65369, "coord_origin": "TOPLEFT"}}, {"id": 18, "text": "are provided to help you ", "bbox": {"l": 467.3399999999999, "t": 498.86148, "r": 568.03546, "b": 508.63367, "coord_origin": "TOPLEFT"}}, {"id": 19, "text": "implement IT solutions more ", "bbox": {"l": 467.3399999999999, "t": 509.90186, "r": 585.44525, "b": 519.67407, "coord_origin": "TOPLEFT"}}, {"id": 20, "text": "effectively in your ", "bbox": {"l": 467.3399999999999, "t": 520.8818699999999, "r": 541.4967, "b": 530.65405, "coord_origin": "TOPLEFT"}}, {"id": 21, "text": "environment.", "bbox": {"l": 467.3399999999999, "t": 531.8618799999999, "r": 520.64893, "b": 541.63406, "coord_origin": "TOPLEFT"}}]}, "text": "IBM Redbooks are developed by the IBM International Technical Support Organization. Experts from IBM, Customers and Partners from around the world create timely technical information based on realistic scenarios. Specific recommendations are provided to help you implement IT solutions more effectively in your environment."}, {"label": "text", "id": 5, "page_no": 17, "cluster": {"id": 5, "label": "text", "bbox": {"l": 466.66748046875, "t": 577.88818359375, "r": 571.0052490234375, "b": 601.5119, "coord_origin": "TOPLEFT"}, "confidence": 0.8230004906654358, "cells": [{"id": 22, "text": "For more information:", "bbox": {"l": 467.3399999999999, "t": 578.83191, "r": 570.948, "b": 589.5119, "coord_origin": "TOPLEFT"}}, {"id": 23, "text": "ibm.com", "bbox": {"l": 467.3399999999999, "t": 590.83191, "r": 508.59961, "b": 601.5119, "coord_origin": "TOPLEFT"}}, {"id": 24, "text": "/redbooks", "bbox": {"l": 508.56000000000006, "t": 590.83191, "r": 552.74518, "b": 601.5119, "coord_origin": "TOPLEFT"}}]}, "text": "For more information: ibm.com /redbooks"}, {"label": "picture", "id": 6, "page_no": 17, "cluster": {"id": 6, "label": "picture", "bbox": {"l": 474.35540771484375, "t": 80.05133819580078, "r": 592.2726440429688, "b": 189.8126220703125, "coord_origin": "TOPLEFT"}, "confidence": 0.9696109890937805, "cells": [{"id": 25, "text": "Redpaper", "bbox": {"l": 474.60001, "t": 164.05658000000005, "r": 580.88989, "b": 188.94097999999997, "coord_origin": "TOPLEFT"}}, {"id": 26, "text": "\u2122", "bbox": {"l": 582.53992, "t": 172.32714999999996, "r": 592.13989, "b": 181.20714999999996, "coord_origin": "TOPLEFT"}}]}, "text": "", "annotations": [], "provenance": null, "predicted_class": null, "confidence": null}, {"label": "section_header", "id": 7, "page_no": 17, "cluster": {"id": 7, "label": "section_header", "bbox": {"l": 26.454715728759766, "t": 71.63792419433594, "r": 447.36002, "b": 141.0381317138672, "coord_origin": "TOPLEFT"}, "confidence": 0.7128154635429382, "cells": [{"id": 27, "text": "Row and Column Access Control ", "bbox": {"l": 27.0, "t": 73.63799999999992, "r": 447.36002, "b": 103.00800000000004, "coord_origin": "TOPLEFT"}}, {"id": 28, "text": "Support in IBM DB2 for i", "bbox": {"l": 27.0, "t": 113.76000999999997, "r": 314.43002, "b": 140.46002, "coord_origin": "TOPLEFT"}}]}, "text": "Row and Column Access Control Support in IBM DB2 for i"}, {"label": "text", "id": 8, "page_no": 17, "cluster": {"id": 8, "label": "text", "bbox": {"l": 26.35322380065918, "t": 240.97860717773438, "r": 127.4436, "b": 267.21185302734375, "coord_origin": "TOPLEFT"}, "confidence": 0.8400375843048096, "cells": [{"id": 29, "text": "Implement roles and ", "bbox": {"l": 26.700001, "t": 242.17200000000003, "r": 127.4436, "b": 252.85199, "coord_origin": "TOPLEFT"}}, {"id": 30, "text": "separation of duties", "bbox": {"l": 26.700001, "t": 256.15198, "r": 121.6608, "b": 266.83196999999996, "coord_origin": "TOPLEFT"}}]}, "text": "Implement roles and separation of duties"}, {"label": "text", "id": 9, "page_no": 17, "cluster": {"id": 9, "label": "text", "bbox": {"l": 26.22105598449707, "t": 283.7095947265625, "r": 120.28319999999998, "b": 322.87198, "coord_origin": "TOPLEFT"}, "confidence": 0.8828509449958801, "cells": [{"id": 31, "text": "Leverage row ", "bbox": {"l": 26.700001, "t": 284.17197, "r": 93.970795, "b": 294.85196, "coord_origin": "TOPLEFT"}}, {"id": 32, "text": "permissions on the ", "bbox": {"l": 26.700001, "t": 298.15198000000004, "r": 120.28319999999998, "b": 308.83197, "coord_origin": "TOPLEFT"}}, {"id": 33, "text": "database", "bbox": {"l": 26.700001, "t": 312.19199000000003, "r": 70.413605, "b": 322.87198, "coord_origin": "TOPLEFT"}}]}, "text": "Leverage row permissions on the database"}, {"label": "text", "id": 10, "page_no": 17, "cluster": {"id": 10, "label": "text", "bbox": {"l": 26.226221084594727, "t": 339.11865234375, "r": 121.44960000000002, "b": 378.85199, "coord_origin": "TOPLEFT"}, "confidence": 0.9064874649047852, "cells": [{"id": 34, "text": "Protect columns by ", "bbox": {"l": 26.700001, "t": 340.15198000000004, "r": 121.44960000000002, "b": 350.83197, "coord_origin": "TOPLEFT"}}, {"id": 35, "text": "defining column ", "bbox": {"l": 26.700001, "t": 354.19199000000003, "r": 106.5696, "b": 364.87198, "coord_origin": "TOPLEFT"}}, {"id": 36, "text": "masks", "bbox": {"l": 26.700001, "t": 368.1720000000001, "r": 58.194, "b": 378.85199, "coord_origin": "TOPLEFT"}}]}, "text": "Protect columns by defining column masks"}, {"label": "text", "id": 11, "page_no": 17, "cluster": {"id": 11, "label": "text", "bbox": {"l": 152.25205993652344, "t": 241.8492889404297, "r": 414.08423, "b": 323.59189, "coord_origin": "TOPLEFT"}, "confidence": 0.9789718389511108, "cells": [{"id": 37, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 ", "bbox": {"l": 152.94, "t": 242.72857999999997, "r": 413.99057, "b": 251.59295999999995, "coord_origin": "TOPLEFT"}}, {"id": 38, "text": "feature of IBM DB2 for i Row and Column Access Control (RCAC). It ", "bbox": {"l": 152.94002, "t": 254.72839, "r": 401.85635, "b": 263.59277, "coord_origin": "TOPLEFT"}}, {"id": 39, "text": "offers a broad description of the function and advantages of controlling ", "bbox": {"l": 152.94002, "t": 266.72821, "r": 414.08423, "b": 275.59259, "coord_origin": "TOPLEFT"}}, {"id": 40, "text": "access to data in a comprehensive and transparent way. This ", "bbox": {"l": 152.94002, "t": 278.72803, "r": 381.24014, "b": 287.59244, "coord_origin": "TOPLEFT"}}, {"id": 41, "text": "publication helps you understand the capabilities of RCAC and provides ", "bbox": {"l": 152.94002, "t": 290.72784, "r": 414.07031, "b": 299.59225, "coord_origin": "TOPLEFT"}}, {"id": 42, "text": "examples of defining, creating, and implementing the row permissions ", "bbox": {"l": 152.94002, "t": 302.72766, "r": 414.05447, "b": 311.59207, "coord_origin": "TOPLEFT"}}, {"id": 43, "text": "and column masks in a relational database environment.", "bbox": {"l": 152.94002, "t": 314.72747999999996, "r": 362.3291, "b": 323.59189, "coord_origin": "TOPLEFT"}}]}, "text": "This IBM Redpaper publication provides information about the IBM i 7.2 feature of IBM DB2 for i Row and Column Access Control (RCAC). It offers a broad description of the function and advantages of controlling access to data in a comprehensive and transparent way. This publication helps you understand the capabilities of RCAC and provides examples of defining, creating, and implementing the row permissions and column masks in a relational database environment."}, {"label": "text", "id": 12, "page_no": 17, "cluster": {"id": 12, "label": "text", "bbox": {"l": 152.3572540283203, "t": 330.5283203125, "r": 414.17383, "b": 388.909912109375, "coord_origin": "TOPLEFT"}, "confidence": 0.9799743890762329, "cells": [{"id": 44, "text": "This paper is intended for database engineers, data-centric application ", "bbox": {"l": 152.94002, "t": 331.70728, "r": 414.17383, "b": 340.57169, "coord_origin": "TOPLEFT"}}, {"id": 45, "text": "developers, and security officers who want to design and implement ", "bbox": {"l": 152.94002, "t": 343.70709, "r": 407.61029, "b": 352.5715, "coord_origin": "TOPLEFT"}}, {"id": 46, "text": "RCAC as a part of their data control and governance policy. A solid ", "bbox": {"l": 152.94002, "t": 355.70691, "r": 399.29565, "b": 364.57132, "coord_origin": "TOPLEFT"}}, {"id": 47, "text": "background in IBM i object level security, DB2 for i relational database ", "bbox": {"l": 152.94002, "t": 367.70673, "r": 414.0603, "b": 376.57114, "coord_origin": "TOPLEFT"}}, {"id": 48, "text": "concepts, and SQL is assumed.", "bbox": {"l": 152.94002, "t": 379.70654, "r": 268.86945, "b": 388.57095, "coord_origin": "TOPLEFT"}}]}, "text": "This paper is intended for database engineers, data-centric application developers, and security officers who want to design and implement RCAC as a part of their data control and governance policy. A solid background in IBM i object level security, DB2 for i relational database concepts, and SQL is assumed."}, {"label": "text", "id": 13, "page_no": 17, "cluster": {"id": 13, "label": "text", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}, "confidence": -1.0, "cells": [{"id": 49, "text": "Back cover", "bbox": {"l": 287.22, "t": 28.54803000000004, "r": 414.24481, "b": 50.748050000000035, "coord_origin": "TOPLEFT"}}]}, "text": "Back cover"}], "headers": [{"label": "page_footer", "id": 1, "page_no": 17, "cluster": {"id": 1, "label": "page_footer", "bbox": {"l": 170.78512573242188, "t": 630.505859375, "r": 232.11270141601562, "b": 639.66301, "coord_origin": "TOPLEFT"}, "confidence": 0.7700248956680298, "cells": [{"id": 1, "text": "REDP-5110-00", "bbox": {"l": 171.0, "t": 631.338, "r": 231.88769999999997, "b": 639.66301, "coord_origin": "TOPLEFT"}}]}, "text": "REDP-5110-00"}]}}] \ No newline at end of file diff --git a/tests/data_scanned/groundtruth/docling_v1/ocr_test.json b/tests/data_scanned/groundtruth/docling_v1/ocr_test.json index 24195672..229dc520 100644 --- a/tests/data_scanned/groundtruth/docling_v1/ocr_test.json +++ b/tests/data_scanned/groundtruth/docling_v1/ocr_test.json @@ -1 +1 @@ -{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "ocr_test.pdf", "filename-prov": null, "document-hash": "73f23122e9edbdb0a115b448e03c8064a0ea8bdc21d02917ce220cf032454f31", "#-pages": 1, "collection-name": null, "description": null, "page-hashes": [{"hash": "8c5c5b766c1bdb92242142ca37260089b02380f9c57729703350f646cdf4771e", "model": "default", "page": 1}]}, "main-text": [{"prov": [{"bbox": [71.35887908935547, 690.8582153320312, 504.0870056152344, 765.0995483398438], "page": 1, "span": [0, 94], "__ref_s3_data": null}], "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package", "type": "paragraph", "name": "Text", "font": null}], "figures": [], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 841.9216918945312, "page": 1, "width": 595.201171875}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file +{"_name": "", "type": "pdf-document", "description": {"title": null, "abstract": null, "authors": null, "affiliations": null, "subjects": null, "keywords": null, "publication_date": null, "languages": null, "license": null, "publishers": null, "url_refs": null, "references": null, "publication": null, "reference_count": null, "citation_count": null, "citation_date": null, "advanced": null, "analytics": null, "logs": [], "collection": null, "acquisition": null}, "file-info": {"filename": "ocr_test.pdf", "filename-prov": null, "document-hash": "73f23122e9edbdb0a115b448e03c8064a0ea8bdc21d02917ce220cf032454f31", "#-pages": 1, "collection-name": null, "description": null, "page-hashes": [{"hash": "8c5c5b766c1bdb92242142ca37260089b02380f9c57729703350f646cdf4771e", "model": "default", "page": 1}]}, "main-text": [{"prov": [{"bbox": [70.90211486816406, 689.2166748046875, 504.87200927734375, 765.0995483398438], "page": 1, "span": [0, 94], "__ref_s3_data": null}], "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package", "type": "paragraph", "name": "Text", "font": null}], "figures": [], "tables": [], "bitmaps": null, "equations": [], "footnotes": [], "page-dimensions": [{"height": 841.9216918945312, "page": 1, "width": 595.201171875}], "page-footers": [], "page-headers": [], "_s3_data": null, "identifiers": null} \ No newline at end of file diff --git a/tests/data_scanned/groundtruth/docling_v1/ocr_test.pages.json b/tests/data_scanned/groundtruth/docling_v1/ocr_test.pages.json index bc164563..b9389bb9 100644 --- a/tests/data_scanned/groundtruth/docling_v1/ocr_test.pages.json +++ b/tests/data_scanned/groundtruth/docling_v1/ocr_test.pages.json @@ -1 +1 @@ -[{"page_no": 0, "size": {"width": 595.201171875, "height": 841.9216918945312}, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "body": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "headers": []}}] \ No newline at end of file +[{"page_no": 0, "size": {"width": 595.201171875, "height": 841.9216918945312}, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "body": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "headers": []}}] \ No newline at end of file diff --git a/tests/data_scanned/groundtruth/docling_v2/ocr_test.json b/tests/data_scanned/groundtruth/docling_v2/ocr_test.json index 6488f943..fe74306e 100644 --- a/tests/data_scanned/groundtruth/docling_v2/ocr_test.json +++ b/tests/data_scanned/groundtruth/docling_v2/ocr_test.json @@ -1 +1 @@ -{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "ocr_test", "origin": {"mimetype": "application/pdf", "binary_hash": 14853448746796404529, "filename": "ocr_test.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}], "name": "_root_", "label": "unspecified"}, "groups": [], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 71.35887908935547, "t": 765.0995483398438, "r": 504.0870056152344, "b": 690.8582153320312, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 94]}], "orig": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package", "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "pictures": [], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 595.201171875, "height": 841.9216918945312}, "image": null, "page_no": 1}}} \ No newline at end of file +{"schema_name": "DoclingDocument", "version": "1.0.0", "name": "ocr_test", "origin": {"mimetype": "application/pdf", "binary_hash": 14853448746796404529, "filename": "ocr_test.pdf", "uri": null}, "furniture": {"self_ref": "#/furniture", "parent": null, "children": [], "name": "_root_", "label": "unspecified"}, "body": {"self_ref": "#/body", "parent": null, "children": [{"cref": "#/texts/0"}], "name": "_root_", "label": "unspecified"}, "groups": [], "texts": [{"self_ref": "#/texts/0", "parent": {"cref": "#/body"}, "children": [], "label": "text", "prov": [{"page_no": 1, "bbox": {"l": 70.90211486816406, "t": 765.0995483398438, "r": 504.87200927734375, "b": 689.2166748046875, "coord_origin": "BOTTOMLEFT"}, "charspan": [0, 94]}], "orig": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package", "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "pictures": [], "tables": [], "key_value_items": [], "pages": {"1": {"size": {"width": 595.201171875, "height": 841.9216918945312}, "image": null, "page_no": 1}}} \ No newline at end of file diff --git a/tests/data_scanned/groundtruth/docling_v2/ocr_test.pages.json b/tests/data_scanned/groundtruth/docling_v2/ocr_test.pages.json index bc164563..b9389bb9 100644 --- a/tests/data_scanned/groundtruth/docling_v2/ocr_test.pages.json +++ b/tests/data_scanned/groundtruth/docling_v2/ocr_test.pages.json @@ -1 +1 @@ -[{"page_no": 0, "size": {"width": 595.201171875, "height": 841.9216918945312}, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "body": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 71.35887908935547, "t": 76.82212829589844, "r": 504.0870056152344, "b": 151.06346130371094, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling", "bbox": {"l": 74.0, "t": 78.0, "r": 144.0, "b": 96.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "bundles", "bbox": {"l": 150.66666666666666, "t": 78.0, "r": 224.66666666666666, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "PDF", "bbox": {"l": 232.0, "t": 78.0, "r": 269.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 3, "text": "document", "bbox": {"l": 275.0, "t": 78.0, "r": 371.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 4, "text": "conversion", "bbox": {"l": 377.3333333333333, "t": 78.0, "r": 479.0, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 5, "text": "to", "bbox": {"l": 485.3333333333333, "t": 79.66666666666663, "r": 503.3333333333333, "b": 92.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 6, "text": "JSON", "bbox": {"l": 72.33333333333333, "t": 104.66666666666663, "r": 121.33333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 7, "text": "and", "bbox": {"l": 129.0, "t": 105.0, "r": 162.33333333333334, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 8, "text": "Markdown", "bbox": {"l": 170.33333333333334, "t": 105.0, "r": 265.6666666666667, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 9, "text": "in", "bbox": {"l": 273.3333333333333, "t": 105.0, "r": 287.6666666666667, "b": 119.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 10, "text": "an", "bbox": {"l": 294.6666666666667, "t": 108.66666666666663, "r": 316.0, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 11, "text": "easy", "bbox": {"l": 323.0, "t": 108.66666666666663, "r": 365.6666666666667, "b": 123.33333333333337, "coord_origin": "TOPLEFT"}}, {"id": 12, "text": "self", "bbox": {"l": 371.0, "t": 105.0, "r": 404.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 13, "text": "contained", "bbox": {"l": 410.3333333333333, "t": 105.0, "r": 503.3333333333333, "b": 119.66666666666663, "coord_origin": "TOPLEFT"}}, {"id": 14, "text": "package", "bbox": {"l": 73.66666666666667, "t": 131.66666666666663, "r": 150.66666666666666, "b": 150.33333333333337, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "headers": []}}] \ No newline at end of file +[{"page_no": 0, "size": {"width": 595.201171875, "height": 841.9216918945312}, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}], "predictions": {"layout": {"clusters": [{"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}]}, "tablestructure": {"table_map": {}}, "figures_classification": null, "equations_prediction": null}, "assembled": {"elements": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "body": [{"label": "text", "id": 0, "page_no": 0, "cluster": {"id": 0, "label": "text", "bbox": {"l": 70.90211866351085, "t": 76.82212829589844, "r": 504.8720079864275, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}, "confidence": 0.9715733528137207, "cells": [{"id": 0, "text": "Docling bundles PDF document conversion to", "bbox": {"l": 73.34702132031646, "t": 76.99999977896755, "r": 503.64955224479564, "b": 97.99999977896755, "coord_origin": "TOPLEFT"}}, {"id": 1, "text": "JSON and Markdown in an easy self contained", "bbox": {"l": 70.90211866351085, "t": 102.66666671251767, "r": 504.8720079864275, "b": 124.83139551297336, "coord_origin": "TOPLEFT"}}, {"id": 2, "text": "package", "bbox": {"l": 73.10852522817731, "t": 130.0013615789096, "r": 153.04479435252625, "b": 152.70503335218427, "coord_origin": "TOPLEFT"}}]}, "text": "Docling bundles PDF document conversion to JSON and Markdown in an easy self contained package"}], "headers": []}}] \ No newline at end of file From 767563bf8b331304892285c0789bba481acaa1b5 Mon Sep 17 00:00:00 2001 From: Manuel030 <51206069+Manuel030@users.noreply.github.com> Date: Wed, 27 Nov 2024 13:45:07 +0100 Subject: [PATCH 18/40] fix: use correct image index in word backend (#442) * fix image index in word backend Signed-off-by: Manuel030 * fix: Fixes for wordx (#432) * fixes for referencing drawing blip in wordx Signed-off-by: Maksym Lysak * Added safety try-except when trying to load pillow image from a docx blob. Added explicit dependency on lxml. Signed-off-by: Maksym Lysak * Added test for word file with embedded emf images, re-generated full tests for docx, eased up dependency on lxml Signed-off-by: Maksym Lysak * Updated lxml dependency version Signed-off-by: Maksym Lysak --------- Signed-off-by: Maksym Lysak Co-authored-by: Maksym Lysak Signed-off-by: Manuel030 * sign dco Signed-off-by: Manuel030 * correct rebase error Signed-off-by: Manuel030 --------- Signed-off-by: Manuel030 Signed-off-by: Maksym Lysak Co-authored-by: Maxim Lysak <101627549+maxmnemonic@users.noreply.github.com> Co-authored-by: Maksym Lysak --- docling/backend/msword_backend.py | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 496bdb7b..05508712 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -507,18 +507,19 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): image_data = get_docx_image(element, drawing_blip) image_bytes = BytesIO(image_data) + level = self.get_level() # Open the BytesIO object with PIL to create an Image try: pil_image = Image.open(image_bytes) doc.add_picture( - parent=self.parents[self.level], + parent=self.parents[level - 1], image=ImageRef.from_pil(image=pil_image, dpi=72), caption=None, ) except (UnidentifiedImageError, OSError) as e: _log.warning("Warning: image cannot be loaded by Pillow") doc.add_picture( - parent=self.parents[self.level], + parent=self.parents[level - 1], caption=None, ) return From 85b29990be6468516b6dbe49f880d9f1f4c11c5a Mon Sep 17 00:00:00 2001 From: Swaymaw <87603098+Swaymaw@users.noreply.github.com> Date: Wed, 27 Nov 2024 18:27:41 +0530 Subject: [PATCH 19/40] feat(ocr): added support for RapidOCR engine (#415) * adding rapidocr engine for ocr in docling Signed-off-by: swayam-singhal * fixing styling format Signed-off-by: Swaymaw * updating pyproject.toml and poetry.lock to fix ci bugs Signed-off-by: Swaymaw * help poetry pinning for python3.9 Signed-off-by: Michele Dolfi * simplifying rapidocr options so that device can be changed using a single option for all models Signed-off-by: Swaymaw * fix styling issues and small bug in rapidOcrOptions Signed-off-by: Swaymaw * use default device until we enable global management Signed-off-by: Michele Dolfi --------- Signed-off-by: swayam-singhal Signed-off-by: Swaymaw Signed-off-by: Michele Dolfi Co-authored-by: swayam-singhal Co-authored-by: Michele Dolfi --- docling/cli/main.py | 4 + docling/datamodel/pipeline_options.py | 36 ++++ docling/models/rapid_ocr_model.py | 147 +++++++++++++++ docling/pipeline/standard_pdf_pipeline.py | 7 + docs/examples/full_page_ocr.py | 4 +- docs/installation.md | 1 + poetry.lock | 208 ++++++++++++++++++++-- pyproject.toml | 8 + tests/test_e2e_ocr_conversion.py | 3 + 9 files changed, 405 insertions(+), 13 deletions(-) create mode 100644 docling/models/rapid_ocr_model.py diff --git a/docling/cli/main.py b/docling/cli/main.py index 09102abd..d6f51b74 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -27,6 +27,7 @@ from docling.datamodel.pipeline_options import ( OcrMacOptions, OcrOptions, PdfPipelineOptions, + RapidOcrOptions, TableFormerMode, TesseractCliOcrOptions, TesseractOcrOptions, @@ -76,6 +77,7 @@ class OcrEngine(str, Enum): TESSERACT_CLI = "tesseract_cli" TESSERACT = "tesseract" OCRMAC = "ocrmac" + RAPIDOCR = "rapidocr" def export_documents( @@ -262,6 +264,8 @@ def convert( ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) elif ocr_engine == OcrEngine.OCRMAC: ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.RAPIDOCR: + ocr_options = RapidOcrOptions(force_full_page_ocr=force_ocr) else: raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index b691215c..58a7bb97 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -29,6 +29,42 @@ class OcrOptions(BaseModel): ) +class RapidOcrOptions(OcrOptions): + kind: Literal["rapidocr"] = "rapidocr" + + # English and chinese are the most commly used models and have been tested with RapidOCR. + lang: List[str] = [ + "english", + "chinese", + ] # However, language as a parameter is not supported by rapidocr yet and hence changing this options doesn't affect anything. + # For more details on supported languages by RapidOCR visit https://rapidai.github.io/RapidOCRDocs/blog/2022/09/28/%E6%94%AF%E6%8C%81%E8%AF%86%E5%88%AB%E8%AF%AD%E8%A8%80/ + + # For more details on the following options visit https://rapidai.github.io/RapidOCRDocs/install_usage/api/RapidOCR/ + text_score: float = 0.5 # same default as rapidocr + + use_det: Optional[bool] = None # same default as rapidocr + use_cls: Optional[bool] = None # same default as rapidocr + use_rec: Optional[bool] = None # same default as rapidocr + + # class Device(Enum): + # CPU = "CPU" + # CUDA = "CUDA" + # DIRECTML = "DIRECTML" + # AUTO = "AUTO" + + # device: Device = Device.AUTO # Default value is AUTO + + print_verbose: bool = False # same default as rapidocr + + det_model_path: Optional[str] = None # same default as rapidocr + cls_model_path: Optional[str] = None # same default as rapidocr + rec_model_path: Optional[str] = None # same default as rapidocr + + model_config = ConfigDict( + extra="forbid", + ) + + class EasyOcrOptions(OcrOptions): kind: Literal["easyocr"] = "easyocr" lang: List[str] = ["fr", "de", "es", "en"] diff --git a/docling/models/rapid_ocr_model.py b/docling/models/rapid_ocr_model.py new file mode 100644 index 00000000..7fd5a3d4 --- /dev/null +++ b/docling/models/rapid_ocr_model.py @@ -0,0 +1,147 @@ +import logging +from typing import Iterable + +import numpy +from docling_core.types.doc import BoundingBox, CoordOrigin + +from docling.datamodel.base_models import OcrCell, Page +from docling.datamodel.document import ConversionResult +from docling.datamodel.pipeline_options import RapidOcrOptions +from docling.datamodel.settings import settings +from docling.models.base_ocr_model import BaseOcrModel +from docling.utils.profiling import TimeRecorder + +_log = logging.getLogger(__name__) + + +class RapidOcrModel(BaseOcrModel): + def __init__(self, enabled: bool, options: RapidOcrOptions): + super().__init__(enabled=enabled, options=options) + self.options: RapidOcrOptions + + self.scale = 3 # multiplier for 72 dpi == 216 dpi. + + if self.enabled: + try: + from rapidocr_onnxruntime import RapidOCR # type: ignore + except ImportError: + raise ImportError( + "RapidOCR is not installed. Please install it via `pip install rapidocr_onnxruntime` to use this OCR engine. " + "Alternatively, Docling has support for other OCR engines. See the documentation." + ) + + # This configuration option will be revamped while introducing device settings for all models. + # For the moment we will default to auto and let onnx-runtime pick the best. + cls_use_cuda = True + rec_use_cuda = True + det_use_cuda = True + det_use_dml = True + cls_use_dml = True + rec_use_dml = True + + # # Same as Defaults in RapidOCR + # cls_use_cuda = False + # rec_use_cuda = False + # det_use_cuda = False + # det_use_dml = False + # cls_use_dml = False + # rec_use_dml = False + + # # If we set everything to true onnx-runtime would automatically choose the fastest accelerator + # if self.options.device == self.options.Device.AUTO: + # cls_use_cuda = True + # rec_use_cuda = True + # det_use_cuda = True + # det_use_dml = True + # cls_use_dml = True + # rec_use_dml = True + + # # If we set use_cuda to true onnx would use the cuda device available in runtime if no cuda device is available it would run on CPU. + # elif self.options.device == self.options.Device.CUDA: + # cls_use_cuda = True + # rec_use_cuda = True + # det_use_cuda = True + + # # If we set use_dml to true onnx would use the dml device available in runtime if no dml device is available it would work on CPU. + # elif self.options.device == self.options.Device.DIRECTML: + # det_use_dml = True + # cls_use_dml = True + # rec_use_dml = True + + self.reader = RapidOCR( + text_score=self.options.text_score, + cls_use_cuda=cls_use_cuda, + rec_use_cuda=rec_use_cuda, + det_use_cuda=det_use_cuda, + det_use_dml=det_use_dml, + cls_use_dml=cls_use_dml, + rec_use_dml=rec_use_dml, + print_verbose=self.options.print_verbose, + det_model_path=self.options.det_model_path, + cls_model_path=self.options.cls_model_path, + rec_model_path=self.options.rec_model_path, + ) + + def __call__( + self, conv_res: ConversionResult, page_batch: Iterable[Page] + ) -> Iterable[Page]: + + if not self.enabled: + yield from page_batch + return + + for page in page_batch: + + assert page._backend is not None + if not page._backend.is_valid(): + yield page + else: + with TimeRecorder(conv_res, "ocr"): + ocr_rects = self.get_ocr_rects(page) + + all_ocr_cells = [] + for ocr_rect in ocr_rects: + # Skip zero area boxes + if ocr_rect.area() == 0: + continue + high_res_image = page._backend.get_page_image( + scale=self.scale, cropbox=ocr_rect + ) + im = numpy.array(high_res_image) + result, _ = self.reader( + im, + use_det=self.options.use_det, + use_cls=self.options.use_cls, + use_rec=self.options.use_rec, + ) + + del high_res_image + del im + + cells = [ + OcrCell( + id=ix, + text=line[1], + confidence=line[2], + bbox=BoundingBox.from_tuple( + coord=( + (line[0][0][0] / self.scale) + ocr_rect.l, + (line[0][0][1] / self.scale) + ocr_rect.t, + (line[0][2][0] / self.scale) + ocr_rect.l, + (line[0][2][1] / self.scale) + ocr_rect.t, + ), + origin=CoordOrigin.TOPLEFT, + ), + ) + for ix, line in enumerate(result) + ] + all_ocr_cells.extend(cells) + + # Post-process the cells + page.cells = self.post_process_cells(all_ocr_cells, page.cells) + + # DEBUG code: + if settings.debug.visualize_ocr: + self.draw_ocr_rects_and_cells(conv_res, page, ocr_rects) + + yield page diff --git a/docling/pipeline/standard_pdf_pipeline.py b/docling/pipeline/standard_pdf_pipeline.py index 63a7a89f..40105a38 100644 --- a/docling/pipeline/standard_pdf_pipeline.py +++ b/docling/pipeline/standard_pdf_pipeline.py @@ -13,6 +13,7 @@ from docling.datamodel.pipeline_options import ( EasyOcrOptions, OcrMacOptions, PdfPipelineOptions, + RapidOcrOptions, TesseractCliOcrOptions, TesseractOcrOptions, ) @@ -26,6 +27,7 @@ from docling.models.page_preprocessing_model import ( PagePreprocessingModel, PagePreprocessingOptions, ) +from docling.models.rapid_ocr_model import RapidOcrModel from docling.models.table_structure_model import TableStructureModel from docling.models.tesseract_ocr_cli_model import TesseractOcrCliModel from docling.models.tesseract_ocr_model import TesseractOcrModel @@ -121,6 +123,11 @@ class StandardPdfPipeline(PaginatedPipeline): enabled=self.pipeline_options.do_ocr, options=self.pipeline_options.ocr_options, ) + elif isinstance(self.pipeline_options.ocr_options, RapidOcrOptions): + return RapidOcrModel( + enabled=self.pipeline_options.do_ocr, + options=self.pipeline_options.ocr_options, + ) elif isinstance(self.pipeline_options.ocr_options, OcrMacOptions): if "darwin" != sys.platform: raise RuntimeError( diff --git a/docs/examples/full_page_ocr.py b/docs/examples/full_page_ocr.py index bbb7e122..967910dc 100644 --- a/docs/examples/full_page_ocr.py +++ b/docs/examples/full_page_ocr.py @@ -6,6 +6,7 @@ from docling.datamodel.pipeline_options import ( EasyOcrOptions, OcrMacOptions, PdfPipelineOptions, + RapidOcrOptions, TesseractCliOcrOptions, TesseractOcrOptions, ) @@ -20,10 +21,11 @@ def main(): pipeline_options.do_table_structure = True pipeline_options.table_structure_options.do_cell_matching = True - # Any of the OCR options can be used:EasyOcrOptions, TesseractOcrOptions, TesseractCliOcrOptions, OcrMacOptions(Mac only) + # Any of the OCR options can be used:EasyOcrOptions, TesseractOcrOptions, TesseractCliOcrOptions, OcrMacOptions(Mac only), RapidOcrOptions # ocr_options = EasyOcrOptions(force_full_page_ocr=True) # ocr_options = TesseractOcrOptions(force_full_page_ocr=True) # ocr_options = OcrMacOptions(force_full_page_ocr=True) + # ocr_options = RapidOcrOptions(force_full_page_ocr=True) ocr_options = TesseractCliOcrOptions(force_full_page_ocr=True) pipeline_options.ocr_options = ocr_options diff --git a/docs/installation.md b/docs/installation.md index addae382..fec7c632 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -31,6 +31,7 @@ Works on macOS, Linux, and Windows, with support for both x86_64 and arm64 archi | Tesseract | System dependency. See description for Tesseract and Tesserocr below. | `TesseractOcrOptions` | | Tesseract CLI | System dependency. See description below. | `TesseractCliOcrOptions` | | OcrMac | System dependency. See description below. | `OcrMacOptions` | + | [RapidOCR](https://github.com/RapidAI/RapidOCR) | Extra feature not included in Default Docling installation can be installed via `pip install rapidocr_onnxruntime` | `RapidOcrOptions` | The Docling `DocumentConverter` allows to choose the OCR engine with the `ocr_options` settings. For example diff --git a/poetry.lock b/poetry.lock index 32454b75..7ee6070a 100644 --- a/poetry.lock +++ b/poetry.lock @@ -182,8 +182,8 @@ files = [ lazy-object-proxy = ">=1.4.0" typing-extensions = {version = ">=4.0.0", markers = "python_version < \"3.11\""} wrapt = [ - {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, {version = ">=1.11,<2", markers = "python_version < \"3.11\""}, + {version = ">=1.14,<2", markers = "python_version >= \"3.11\""}, ] [[package]] @@ -618,6 +618,23 @@ files = [ {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, ] +[[package]] +name = "coloredlogs" +version = "15.0.1" +description = "Colored terminal output for Python's logging module" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, + {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, +] + +[package.dependencies] +humanfriendly = ">=9.1" + +[package.extras] +cron = ["capturer (>=2.4)"] + [[package]] name = "comm" version = "0.2.2" @@ -825,8 +842,8 @@ files = [ docling-core = ">=2.0,<3.0" docutils = "!=0.21" numpy = [ - {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, + {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, ] pandas = {version = ">=2.1.4,<3.0.0", markers = "python_version >= \"3.9\""} python-dotenv = ">=1.0.0,<2.0.0" @@ -912,8 +929,8 @@ files = [ huggingface_hub = ">=0.23,<1" jsonlines = ">=3.1.0,<4.0.0" numpy = [ - {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, + {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, ] opencv-python-headless = ">=4.6.0.66,<5.0.0.0" Pillow = ">=10.0.0,<11.0.0" @@ -1145,6 +1162,17 @@ TOMLi = {version = "*", markers = "python_version < \"3.11\""} [package.extras] dev = ["pyTest", "pyTest-cov"] +[[package]] +name = "flatbuffers" +version = "24.3.25" +description = "The FlatBuffers serialization format for Python" +optional = true +python-versions = "*" +files = [ + {file = "flatbuffers-24.3.25-py2.py3-none-any.whl", hash = "sha256:8dbdec58f935f3765e4f7f3cf635ac3a77f83568138d6a2311f524ec96364812"}, + {file = "flatbuffers-24.3.25.tar.gz", hash = "sha256:de2ec5b203f21441716617f38443e0a8ebf3d25bf0d9c0bb0ce68fa00ad546a4"}, +] + [[package]] name = "frozenlist" version = "1.5.0" @@ -1495,6 +1523,20 @@ testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "fastapi", "gr torch = ["safetensors[torch]", "torch"] typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] +[[package]] +name = "humanfriendly" +version = "10.0" +description = "Human friendly output for text interfaces using Python" +optional = true +python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" +files = [ + {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, + {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, +] + +[package.dependencies] +pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} + [[package]] name = "identify" version = "2.6.3" @@ -2050,8 +2092,8 @@ jsonpatch = ">=1.33,<2.0" langsmith = ">=0.1.112,<0.2.0" packaging = ">=23.2,<25" pydantic = [ - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] PyYAML = ">=5.3" tenacity = ">=8.1.0,<8.4.0 || >8.4.0,<9.0.0" @@ -2119,8 +2161,8 @@ files = [ httpx = ">=0.23.0,<1" orjson = {version = ">=3.9.14,<4.0.0", markers = "platform_python_implementation != \"PyPy\""} pydantic = [ - {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, {version = ">=1,<3", markers = "python_full_version < \"3.12.4\""}, + {version = ">=2.7.4,<3.0.0", markers = "python_full_version >= \"3.12.4\""}, ] requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" @@ -3524,6 +3566,112 @@ Click = ">=7.0" pillow = "*" pyobjc-framework-Vision = "*" +[[package]] +name = "onnxruntime" +version = "1.19.2" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = true +python-versions = "*" +files = [ + {file = "onnxruntime-1.19.2-cp310-cp310-macosx_11_0_universal2.whl", hash = "sha256:84fa57369c06cadd3c2a538ae2a26d76d583e7c34bdecd5769d71ca5c0fc750e"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:bdc471a66df0c1cdef774accef69e9f2ca168c851ab5e4f2f3341512c7ef4666"}, + {file = "onnxruntime-1.19.2-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:e3a4ce906105d99ebbe817f536d50a91ed8a4d1592553f49b3c23c4be2560ae6"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win32.whl", hash = "sha256:4b3d723cc154c8ddeb9f6d0a8c0d6243774c6b5930847cc83170bfe4678fafb3"}, + {file = "onnxruntime-1.19.2-cp310-cp310-win_amd64.whl", hash = "sha256:17ed7382d2c58d4b7354fb2b301ff30b9bf308a1c7eac9546449cd122d21cae5"}, + {file = "onnxruntime-1.19.2-cp311-cp311-macosx_11_0_universal2.whl", hash = "sha256:d863e8acdc7232d705d49e41087e10b274c42f09e259016a46f32c34e06dc4fd"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c1dfe4f660a71b31caa81fc298a25f9612815215a47b286236e61d540350d7b6"}, + {file = "onnxruntime-1.19.2-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:a36511dc07c5c964b916697e42e366fa43c48cdb3d3503578d78cef30417cb84"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win32.whl", hash = "sha256:50cbb8dc69d6befad4746a69760e5b00cc3ff0a59c6c3fb27f8afa20e2cab7e7"}, + {file = "onnxruntime-1.19.2-cp311-cp311-win_amd64.whl", hash = "sha256:1c3e5d415b78337fa0b1b75291e9ea9fb2a4c1f148eb5811e7212fed02cfffa8"}, + {file = "onnxruntime-1.19.2-cp312-cp312-macosx_11_0_universal2.whl", hash = "sha256:68e7051bef9cfefcbb858d2d2646536829894d72a4130c24019219442b1dd2ed"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:d2d366fbcc205ce68a8a3bde2185fd15c604d9645888703785b61ef174265168"}, + {file = "onnxruntime-1.19.2-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:477b93df4db467e9cbf34051662a4b27c18e131fa1836e05974eae0d6e4cf29b"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win32.whl", hash = "sha256:9a174073dc5608fad05f7cf7f320b52e8035e73d80b0a23c80f840e5a97c0147"}, + {file = "onnxruntime-1.19.2-cp312-cp312-win_amd64.whl", hash = "sha256:190103273ea4507638ffc31d66a980594b237874b65379e273125150eb044857"}, + {file = "onnxruntime-1.19.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636bc1d4cc051d40bc52e1f9da87fbb9c57d9d47164695dfb1c41646ea51ea66"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:5bd8b875757ea941cbcfe01582970cc299893d1b65bd56731e326a8333f638a3"}, + {file = "onnxruntime-1.19.2-cp38-cp38-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:b2046fc9560f97947bbc1acbe4c6d48585ef0f12742744307d3364b131ac5778"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win32.whl", hash = "sha256:31c12840b1cde4ac1f7d27d540c44e13e34f2345cf3642762d2a3333621abb6a"}, + {file = "onnxruntime-1.19.2-cp38-cp38-win_amd64.whl", hash = "sha256:016229660adea180e9a32ce218b95f8f84860a200f0f13b50070d7d90e92956c"}, + {file = "onnxruntime-1.19.2-cp39-cp39-macosx_11_0_universal2.whl", hash = "sha256:006c8d326835c017a9e9f74c9c77ebb570a71174a1e89fe078b29a557d9c3848"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:df2a94179a42d530b936f154615b54748239c2908ee44f0d722cb4df10670f68"}, + {file = "onnxruntime-1.19.2-cp39-cp39-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:fae4b4de45894b9ce7ae418c5484cbf0341db6813effec01bb2216091c52f7fb"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win32.whl", hash = "sha256:dc5430f473e8706fff837ae01323be9dcfddd3ea471c900a91fa7c9b807ec5d3"}, + {file = "onnxruntime-1.19.2-cp39-cp39-win_amd64.whl", hash = "sha256:38475e29a95c5f6c62c2c603d69fc7d4c6ccbf4df602bd567b86ae1138881c49"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + +[[package]] +name = "onnxruntime" +version = "1.20.1" +description = "ONNX Runtime is a runtime accelerator for Machine Learning models" +optional = true +python-versions = "*" +files = [ + {file = "onnxruntime-1.20.1-cp310-cp310-macosx_13_0_universal2.whl", hash = "sha256:e50ba5ff7fed4f7d9253a6baf801ca2883cc08491f9d32d78a80da57256a5439"}, + {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:7b2908b50101a19e99c4d4e97ebb9905561daf61829403061c1adc1b588bc0de"}, + {file = "onnxruntime-1.20.1-cp310-cp310-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:d82daaec24045a2e87598b8ac2b417b1cce623244e80e663882e9fe1aae86410"}, + {file = "onnxruntime-1.20.1-cp310-cp310-win32.whl", hash = "sha256:4c4b251a725a3b8cf2aab284f7d940c26094ecd9d442f07dd81ab5470e99b83f"}, + {file = "onnxruntime-1.20.1-cp310-cp310-win_amd64.whl", hash = "sha256:d3b616bb53a77a9463707bb313637223380fc327f5064c9a782e8ec69c22e6a2"}, + {file = "onnxruntime-1.20.1-cp311-cp311-macosx_13_0_universal2.whl", hash = "sha256:06bfbf02ca9ab5f28946e0f912a562a5f005301d0c419283dc57b3ed7969bb7b"}, + {file = "onnxruntime-1.20.1-cp311-cp311-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f6243e34d74423bdd1edf0ae9596dd61023b260f546ee17d701723915f06a9f7"}, + {file = "onnxruntime-1.20.1-cp311-cp311-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:5eec64c0269dcdb8d9a9a53dc4d64f87b9e0c19801d9321246a53b7eb5a7d1bc"}, + {file = "onnxruntime-1.20.1-cp311-cp311-win32.whl", hash = "sha256:a19bc6e8c70e2485a1725b3d517a2319603acc14c1f1a017dda0afe6d4665b41"}, + {file = "onnxruntime-1.20.1-cp311-cp311-win_amd64.whl", hash = "sha256:8508887eb1c5f9537a4071768723ec7c30c28eb2518a00d0adcd32c89dea3221"}, + {file = "onnxruntime-1.20.1-cp312-cp312-macosx_13_0_universal2.whl", hash = "sha256:22b0655e2bf4f2161d52706e31f517a0e54939dc393e92577df51808a7edc8c9"}, + {file = "onnxruntime-1.20.1-cp312-cp312-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:f1f56e898815963d6dc4ee1c35fc6c36506466eff6d16f3cb9848cea4e8c8172"}, + {file = "onnxruntime-1.20.1-cp312-cp312-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bb71a814f66517a65628c9e4a2bb530a6edd2cd5d87ffa0af0f6f773a027d99e"}, + {file = "onnxruntime-1.20.1-cp312-cp312-win32.whl", hash = "sha256:bd386cc9ee5f686ee8a75ba74037750aca55183085bf1941da8efcfe12d5b120"}, + {file = "onnxruntime-1.20.1-cp312-cp312-win_amd64.whl", hash = "sha256:19c2d843eb074f385e8bbb753a40df780511061a63f9def1b216bf53860223fb"}, + {file = "onnxruntime-1.20.1-cp313-cp313-macosx_13_0_universal2.whl", hash = "sha256:cc01437a32d0042b606f462245c8bbae269e5442797f6213e36ce61d5abdd8cc"}, + {file = "onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:fb44b08e017a648924dbe91b82d89b0c105b1adcfe31e90d1dc06b8677ad37be"}, + {file = "onnxruntime-1.20.1-cp313-cp313-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:bda6aebdf7917c1d811f21d41633df00c58aff2bef2f598f69289c1f1dabc4b3"}, + {file = "onnxruntime-1.20.1-cp313-cp313-win_amd64.whl", hash = "sha256:d30367df7e70f1d9fc5a6a68106f5961686d39b54d3221f760085524e8d38e16"}, + {file = "onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_aarch64.manylinux_2_28_aarch64.whl", hash = "sha256:c9158465745423b2b5d97ed25aa7740c7d38d2993ee2e5c3bfacb0c4145c49d8"}, + {file = "onnxruntime-1.20.1-cp313-cp313t-manylinux_2_27_x86_64.manylinux_2_28_x86_64.whl", hash = "sha256:0df6f2df83d61f46e842dbcde610ede27218947c33e994545a22333491e72a3b"}, +] + +[package.dependencies] +coloredlogs = "*" +flatbuffers = "*" +numpy = ">=1.21.6" +packaging = "*" +protobuf = "*" +sympy = "*" + +[[package]] +name = "opencv-python" +version = "4.10.0.84" +description = "Wrapper package for OpenCV python bindings." +optional = true +python-versions = ">=3.6" +files = [ + {file = "opencv-python-4.10.0.84.tar.gz", hash = "sha256:72d234e4582e9658ffea8e9cae5b63d488ad06994ef12d81dc303b17472f3526"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-macosx_11_0_arm64.whl", hash = "sha256:fc182f8f4cda51b45f01c64e4cbedfc2f00aff799debebc305d8d0210c43f251"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-macosx_12_0_x86_64.whl", hash = "sha256:71e575744f1d23f79741450254660442785f45a0797212852ee5199ef12eed98"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09a332b50488e2dda866a6c5573ee192fe3583239fb26ff2f7f9ceb0bc119ea6"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ace140fc6d647fbe1c692bcb2abce768973491222c067c131d80957c595b71f"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-win32.whl", hash = "sha256:2db02bb7e50b703f0a2d50c50ced72e95c574e1e5a0bb35a8a86d0b35c98c236"}, + {file = "opencv_python-4.10.0.84-cp37-abi3-win_amd64.whl", hash = "sha256:32dbbd94c26f611dc5cc6979e6b7aa1f55a64d6b463cc1dcd3c95505a63e48fe"}, +] + +[package.dependencies] +numpy = [ + {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, + {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, +] + [[package]] name = "opencv-python-headless" version = "4.10.0.84" @@ -3542,12 +3690,12 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, + {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, - {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] [[package]] @@ -3727,8 +3875,8 @@ files = [ [package.dependencies] numpy = [ - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.22.4", markers = "python_version < \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, ] python-dateutil = ">=2.8.2" @@ -4326,8 +4474,8 @@ files = [ annotated-types = ">=0.6.0" pydantic-core = "2.23.4" typing-extensions = [ - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, {version = ">=4.6.1", markers = "python_version < \"3.13\""}, + {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, ] [package.extras] @@ -4495,8 +4643,8 @@ files = [ astroid = ">=2.15.8,<=2.17.0-dev0" colorama = {version = ">=0.4.5", markers = "sys_platform == \"win32\""} dill = [ - {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, {version = ">=0.2", markers = "python_version < \"3.11\""}, + {version = ">=0.3.6", markers = "python_version >= \"3.11\""}, ] isort = ">=4.2.5,<6" mccabe = ">=0.6,<0.8" @@ -4685,6 +4833,20 @@ files = [ flake8 = "6.1.0" tomli = {version = "*", markers = "python_version < \"3.11\""} +[[package]] +name = "pyreadline3" +version = "3.5.4" +description = "A python implementation of GNU readline." +optional = true +python-versions = ">=3.8" +files = [ + {file = "pyreadline3-3.5.4-py3-none-any.whl", hash = "sha256:eaf8e6cc3c49bcccf145fc6067ba8643d1df34d604a1ec0eccbf7a18e6d3fae6"}, + {file = "pyreadline3-3.5.4.tar.gz", hash = "sha256:8d57d53039a1c75adba8e50dd3d992b28143480816187ea5efbd5c78e6c885b7"}, +] + +[package.extras] +dev = ["build", "flake8", "mypy", "pytest", "twine"] + [[package]] name = "pytest" version = "7.4.4" @@ -5216,6 +5378,27 @@ files = [ [package.dependencies] cffi = {version = "*", markers = "implementation_name == \"pypy\""} +[[package]] +name = "rapidocr-onnxruntime" +version = "1.4.0" +description = "A cross platform OCR Library based on OnnxRuntime." +optional = true +python-versions = "<3.13,>=3.6" +files = [ + {file = "rapidocr_onnxruntime-1.4.0-py3-none-any.whl", hash = "sha256:d21c4ba2ef80b7a8ecf8178632f273398a92ab44a1ffb9e171139ef2a589d690"}, +] + +[package.dependencies] +numpy = ">=1.19.5,<3.0.0" +onnxruntime = ">=1.7.0" +opencv-python = ">=4.5.1.48" +Pillow = "*" +pyclipper = ">=1.2.0" +PyYAML = "*" +Shapely = ">=1.7.1,<2.0.4 || >2.0.4" +six = ">=1.15.0" +tqdm = "*" + [[package]] name = "readme-renderer" version = "44.0" @@ -7226,9 +7409,10 @@ type = ["pytest-mypy"] [extras] ocrmac = ["ocrmac"] +rapidocr = ["onnxruntime", "onnxruntime", "rapidocr-onnxruntime"] tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "0e1ba9bc3f10cdd3ddf161469701ca603279bad13505ff3b7b042826e2de4c35" +content-hash = "c08324f73fb809466ad3494605a6745ec6c9f38b60e7b1f516f3f93a29534ca4" diff --git a/pyproject.toml b/pyproject.toml index f387657a..86050cac 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -50,6 +50,13 @@ marko = "^2.1.2" openpyxl = "^3.1.5" lxml = ">=4.0.0,<6.0.0" ocrmac = { version = "^1.0.0", markers = "sys_platform == 'darwin'", optional = true } +rapidocr-onnxruntime = { version = "^1.4.0", optional = true, markers = "python_version < '3.13'" } +onnxruntime = [ + # 1.19.2 is the last version with python3.9 support, + # see https://github.com/microsoft/onnxruntime/releases/tag/v1.20.0 + { version = ">=1.7.0,<1.20.0", optional = true, markers = "python_version < '3.10'" }, + { version = "^1.7.0", optional = true, markers = "python_version >= '3.10'" } +] [tool.poetry.group.dev.dependencies] black = {extras = ["jupyter"], version = "^24.4.2"} @@ -104,6 +111,7 @@ torchvision = [ [tool.poetry.extras] tesserocr = ["tesserocr"] ocrmac = ["ocrmac"] +rapidocr = ["rapidocr-onnxruntime", "onnxruntime"] [tool.poetry.scripts] docling = "docling.cli.main:app" diff --git a/tests/test_e2e_ocr_conversion.py b/tests/test_e2e_ocr_conversion.py index 68dac33e..73a943af 100644 --- a/tests/test_e2e_ocr_conversion.py +++ b/tests/test_e2e_ocr_conversion.py @@ -10,6 +10,7 @@ from docling.datamodel.pipeline_options import ( OcrMacOptions, OcrOptions, PdfPipelineOptions, + RapidOcrOptions, TesseractCliOcrOptions, TesseractOcrOptions, ) @@ -56,9 +57,11 @@ def test_e2e_conversions(): EasyOcrOptions(), TesseractOcrOptions(), TesseractCliOcrOptions(), + RapidOcrOptions(), EasyOcrOptions(force_full_page_ocr=True), TesseractOcrOptions(force_full_page_ocr=True), TesseractCliOcrOptions(force_full_page_ocr=True), + RapidOcrOptions(force_full_page_ocr=True), ] # only works on mac From 211f4f7570c028369f1861e7eea319e5a5bc1b35 Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Wed, 27 Nov 2024 13:29:32 +0000 Subject: [PATCH 20/40] chore: bump version to 2.8.0 [skip ci] --- CHANGELOG.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 8c802863..5e0d4034 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [v2.8.0](https://github.com/DS4SD/docling/releases/tag/v2.8.0) - 2024-11-27 + +### Feature + +* **ocr:** Added support for RapidOCR engine ([#415](https://github.com/DS4SD/docling/issues/415)) ([`85b2999`](https://github.com/DS4SD/docling/commit/85b29990be6468516b6dbe49f880d9f1f4c11c5a)) + +### Fix + +* Use correct image index in word backend ([#442](https://github.com/DS4SD/docling/issues/442)) ([`767563b`](https://github.com/DS4SD/docling/commit/767563bf8b331304892285c0789bba481acaa1b5)) +* Update tests and examples for docling-core 2.5.1 ([#449](https://github.com/DS4SD/docling/issues/449)) ([`29807a2`](https://github.com/DS4SD/docling/commit/29807a2d687896c67ada934c6a626401f5930e50)) + ## [v2.7.1](https://github.com/DS4SD/docling/releases/tag/v2.7.1) - 2024-11-26 ### Fix diff --git a/pyproject.toml b/pyproject.toml index 86050cac..6ae41b8f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.7.1" # DO NOT EDIT, updated automatically +version = "2.8.0" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 84c46fdeb344502edf9647c610c4828ab0ffb9dd Mon Sep 17 00:00:00 2001 From: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Date: Thu, 28 Nov 2024 09:41:21 +0100 Subject: [PATCH 21/40] docs: extend integration docs & README (#456) Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --- README.md | 24 ++++++++++++++++++++---- docs/assets/docling_ecosystem.png | Bin 0 -> 238489 bytes docs/assets/docling_ecosystem.pptx | Bin 0 -> 584282 bytes docs/index.md | 4 +--- docs/integrations/bee.md | 9 +++++++++ docs/integrations/index.md | 5 +++++ docs/integrations/instructlab.md | 17 +++++++++++++++++ docs/integrations/prodigy.md | 9 +++++++++ docs/integrations/spacy.md | 2 ++ docs/overrides/main.html | 2 ++ mkdocs.yml | 9 ++++++--- 11 files changed, 71 insertions(+), 10 deletions(-) create mode 100644 docs/assets/docling_ecosystem.png create mode 100644 docs/assets/docling_ecosystem.pptx create mode 100644 docs/integrations/bee.md create mode 100644 docs/integrations/instructlab.md create mode 100644 docs/integrations/prodigy.md diff --git a/README.md b/README.md index 1c350cd4..cafb15b4 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

-# Docling +# 🦆 Docling

DS4SD%2Fdocling | Trendshift @@ -29,7 +29,7 @@ Docling parses documents and exports them to the desired format with ease and sp * 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON * 📑 Advanced PDF document understanding including page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](https://ds4sd.github.io/docling/concepts/docling_document/) representation format -* 🤖 Easy integration with LlamaIndex 🦙 & LangChain 🦜🔗 for powerful RAG / QA applications +* 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications * 🔍 OCR support for scanned PDFs * 💻 Simple and convenient CLI @@ -65,8 +65,24 @@ result = converter.convert(source) print(result.document.export_to_markdown()) # output: "## Docling Technical Report[...]" ``` -Check out [Getting started](https://ds4sd.github.io/docling/). -You will find lots of tuning options to leverage all the advanced capabilities. +More [advanced usage options](https://ds4sd.github.io/docling/usage/) are available in +the docs. + +## Documentation + +Check out Docling's [documentation](https://ds4sd.github.io/docling/), for details on +installation, usage, concepts, recipes, extensions, and more. + +## Examples + +Go hands-on with our [examples](https://ds4sd.github.io/docling/examples/), +demonstrating how to address different application use cases with Docling. + +## Integrations + +To further accelerate your AI application development, check out Docling's native +[integrations](https://ds4sd.github.io/docling/integrations/) with popular frameworks +and tools. ## Get help and support diff --git a/docs/assets/docling_ecosystem.png b/docs/assets/docling_ecosystem.png new file mode 100644 index 0000000000000000000000000000000000000000..299f62dc5b5b805db61decd57c3dcf4d8f5fa09e GIT binary patch literal 238489 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

`hScf4Y9-$3^r!SwD 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%0D; zqcAxw;tA4om;IuCl%Dgb;NV|`jQ;q}EdQE? zyQ3sSNhTQHTJYKhwRMAac=Hu(q0l;7FCGo=k73(6MD>6YY^xR01N}V6MUb9i9s>ve z^zq`~-|LoM4W53oram2BWD9$iW_YYq7wal$t#OF#Q%8>MpQ2=R-hSKg-e33ZZL;jC zu6V|4U}O^hmN$x`SHsu@AX%sR6V$BVSfC=~q;s1GE|26nttN;R;USuyX`wV@;6t6wk!URG%3B`&lkaKOr!dG9~4$<_nOgQHrDiJ_3o&&wNrWP8yes zMf=zz@7Mkvp>tTBe_MVoY9Yx|K@fTO;@fdhn83Cd%u7L0w#=+KENbH{F+qb0E6%;2c1)5C|4>0-Dexm(*Dq0W_GcJt4BY5JaH z$lA6!q$X8t$MHHxF}dzdOapclcyUa%AtYolv8&Gb{!hEr@0RuI1pMz;LE0?*n%e&A z7i#rte26;q?dq?zG^lFh{ESRB}C_gvvOef_QE@TS+ z31BdU8PQC}?XvgWgqVD4W^gHqh|-IJ8aLn}qBlBDYda`cwSX=$)|@EZSWuZs6F1m7 zA{$d4@PB>O)#)zpFG^E7UxIB{cofz8&XdbU8@;@d2xZ?>DuTvS(Zx;hlYc1>ef+k{ zG+`b6Cr5twB(mi9@CzLUwJkFSfK|V1O8p~PDk?^>;(!!(niD9BXTtVBM;c$eM<={h zvP{!9-sz>xu=Tu1mDv4M2)wFcEK>IG!T5o5nwS-&PtTi;Kw~}8c=1i)w=N5xyEvteNMzTc33Vrz zfBhB&LSDFqq7+Hk+O&?!DHdw!_C_xrn z)4#Z#BA00fe5`Q72=%rp^|Cq|iyf>l=Vlo}fawY^3KO{zer}ELr&b5@9Qy_@n&EBJsE#u!t|EI5X+Hf*xigwSo%ik z>TlJT<59Ek)wtl2nw25IOzJ3ZrX$TjU5w>A{|Dy43RO|{kH|XAl7tMX(B1h^`i&#- zM7e&tF$q-Z9OGn&lhzZPe#)tAh6Hvi5?J|X2?3S7s$L!>NQCBT$Shypl;6!yg&!kP zPJF0Cy3*4S6oaPYlBM;Q13Grnnv%`=-0lL;>HTIJA8Ar`H|)DX-F!{E4g5hh#tEr@aw`{2^YGyE zq8lnLp0Nm3;=LO5SQChd=Bi!C0uNp{jMfc&7cM2!wJ5oy;|Y{4*N>50>tzzMK?G5m zC~a){%1&7X3WWcMvNDCAJQ|m6-W{L49>!6z8jb~sj5mJ8NJL{rFu4jUdmNwv1`ZXz z;lPDoQ^XK5Tv4PRF=nU2BDzqQ)UyPhXyP2$I=VxC86$FM{@E@qLIl%w9Tlq%_jySn zVms`2Mbw||Vs`y0QMb@yL|&wSSo2&wxQm13A|lnbuzxu=)dzkr0e$E9+&`PC?CQ~Z?K#PIF|HK1DTNO^(~;0% zpU#5qjkhI;H*R97dgV8?zc&&z z76gloV4IAgFk^hI%fJ{$-PKAtv6mZ~EhkA-eF4)H5bpVXU{cM9yJTdE*o=_rc(oR* zvmB&;cLHvC5n`+Bo^DN5vQ!Zp=Ad6W!x_uya?#iH`1!fZVX9Unka@=5sM2S2>EQe` z9I^|dva&M6nrYJ4cnJaeZzXpjib06HcvshMMuqm87jjhXJj6ecZ;Cs+Ks&2AIwIZ+ z+ER}S|i^d{F_J9;& zU*p^2(Vfokj$`%9*s3Q7hCkK-&Ajt5#qE&nHR+c`_q1J}A3QVQ!iznEK|wfB7xJ{X zlxSBdO<-Wvhx~psP9f+JpF-)U#-p-W8YMnwZA~*?>7v2GI)38cfT8s2)HH5d)fh}nKD7p!Tjz2oQhO1bsQo!80z>{XdJdUH^> zxw1p&-E%0V?4c_-MK9zXK8jR^{m+b2RWB6ZE30i0sCfS!KKWS4_s=Tz5P`1TI+hMx z%!6zBvkc9$R{Hgk!po%+K}}-zFtcjq^I_2t!M*hK;@08m;-YS!f{Frh2$$(6b#*xB z`|SuyHozPBp_~guJO()<;05<&2itXReD-Kcg{)gFpO+(SUDd|n5ROvEhX+%r2RzwD z2o7GO^Zf>X3lPyhoJ5(31}*CHaZmLzo1bS(7?7cpHyDIxA7wC{Cr0DGc`Hqo9&@!P z|LAD=bRd<{)DInQ;|cdvcl^+x<|${vkLj((sU)^06BR0HfOm6%2m7cG=<*&a=F$Gi z!vjpJpp~)In(>bG%Sv-RnmgUlY$k6`s8aTJa;P@YBPp7$IB9AH85TlT)Z-zf&(Z6U zG#Cwim+g2?!R{zEUdMRIt_?qTX zMv5wmbYu)U{nYmwkI|X<^nrZL{~3J)P+>v;as_mLSBTjX+KE(8USP3mk3r}zA?$bD z6vxc!oDxFL44>A&cJ=H&&c7_3Mq9rvMFC2!`EKkL#h ztWhI8uCG{!lzY*e8>ZOrpN>2u$hsxtYlKR!(dj;@R!YJ#j$_2rU~I@~4{)~gNqAny zl3I5Rs7>-$wG~!K_08p2a1{>JStSyrMXHnam8u=q*>(uBBy_3mW4)Dm1UT*OE5v$1zFL7=QalX0g@K8= zupO-aZ(;Bph{-V+*5;NS3QbbKic)nCGxFteT!eKy5Xe^7%Rj~zA$#QR7}@LKwN=uN zTw`lL8LQ}U;Hq7 z?lh4V)ztJfrpXSmB8-Y*C~r^^LHx0z;|4-Q-Xx zCyPq@6={Gq@~P+fq%>RhZ};O#@C#sXwzy@zKvwDo3rMdqW%NAz2DK?Bc)j$gZS{H1 z-kW{5{@X^%w}4O>duwRrz%}?yG=;q*_lc&1+-PO@ybDBk(7Ipd%dC3V;pU+YhHDX= zV8wm>mW*+9AN5r4S|~E?8mH+vzuq2KlsxasX}Fm#ByXjpa%;zb+_{s%a7o=je7E#B zHbl_DccE}tJFeumroeM@#gg@lGGKTZ`3P9}iw^d56^!kpaUv`=u6;lM3$$YCvHH~5 z>^xdO`RuckEO^=v@Y%N@T$267j@L`!F-RTpLaFB}WwzfO;gmJAAfe$11TAo6WItnx z_hTc*CnU%=N~GW+L!nT`o0}T~=7TNC2$FQg>t1wjz}dM`Lof*fKN&a#=e+_2hJNuY z(2U%U5sBXWI_f2+CK_X1(;RQP<<=R(Y+rY%oxSE+@mZx3Zwpo0trhiR*M>FxfDq=} z)M@fN4eV~+<~yC0NAq>s=>{2@E!*8Kt5&uS7u3uA|6aWw-&GyO#+Y)cV{p!XQlAGu zRHkbOHtCA|V6UN5KH=5EEKM5;6~ic%ZhvzjG7uQHh)0j{FCPi%p@e_vVwCa#zb7c8 zPl&E%Fe<$>_w*hrcF>*gjL0)&Pmmu@EfDNS*X?P*x{X+2Fk~m`rzB;X62QGhANW|| z*OBM^`9V@_7c1D@M9>^X0YYU7a*0&%^|-0o-9eE+xaAxwsR-4YE+F z%K^Lm8j<}SJpS$Q$o5L))}48^Uei|q+ls-Z_KW!xXH6O#2Z21S7sEzEh4U!#xKeg& z`K6suu{-0s$gatwrl<)b|ABJ{6bInrIz5JkUS!&3uw*$dR7u2gWb@>Fj>A#ZB^Xuo zZrRJ{YH4@x+}qgh=6RSfd)d6E*{gE@;_cTT0nN+fTMkv8MLr$xJ!N0|5EO1ms%<60 zOd1^GBNp;5nylDf?6u^07OM~xU3rjiT#D8Gqwr%@4SR+R{;EtA8Y7FTU!|F( z=}Q?w9P??~3O_2B3yBWOA%9LJ8gY}iR0DtL^KWEKwv^mJA7Z>B3(td4IKy9&Ai5;a z2dC=d>zVQXq7&7za70U8r>DZ;eBYtJ$`nCJe@cqN(pW$8QOwJPTUs~g{Z`4I&GXRj zhFh`sd`iRMsHzm<@dO-Mt8e@6QP(4|?w}<*>Bn{wQD}5nDRa%xA8xH_jCZYJ6VqqtgZ==IHQh_hG%FSR(_lWgs?(7- z=u<@Ee5d|^@bAMi`8y*nh_;#lzG{bk-FTeb?PH% z$-5gfSn|ka{O#g-tNaX{j_k^Z4M}aymLYBa03icO3l9v6M;iee(u{Z~>=g7~AHg4( zs}YfV(;!zcyHyv4UBGm)B;kRrBu(*H7ZS3AC-6q3(^h=SwGBL^#JDRPRTvVYv1a9G zh6KAOC=Qi1m=Un=Oli0vYp1b&hLmGrUoVPN2DaNV za-z9Gw>y+cKeNFl9T(m);e}?C5bjj1!;zP=2`225WZ1~pPs(aDn=wB>M3771~5m`&ts$XElu{B%70c z@)-u}sq+m=3B~wD%%^mjpe5NX&+CjEe5}O`{FfU-WgM};&BManB&vu zBd^0sz>F?H8UPMNk0r+dsG#Deo>9HV5R)SOePuy!=bBJ|XRMq{;Y-vw1DuV*p=DVH zyyv71)=~-<_;;uKmeDu@zQ$qL?(>DQ|F91y17v;wqaF+2{H-Q8a>HVqgLkgi^A?l6 z<)@a|mn~i&gdYmuk&?@TkJ1YI*m5^5SkCQY{?tG4?M49-RVjEL9{J~Gc$Ct;IRaPN zD-bux1tV2$Q~*o8F-S_= zRkC9=`9NRbs@Xm-&B7U_wmLHl-R{ltt3z3eiTK#PQd<+1?XGrh%Zzcq?7@%yXNkC} zsD5sr4-=Q28A|6xv^r1UA75tVbQ=3($Gg0oP~{_ocZ(H%{E-1OZERwv{shmynp19? zO*eEKV}rU*et(x&WHD}FnfPG*ki;pMBAb!3avx5=nawprv@G1UpB$oJ$kF4!XWZ;} z2Yksa_CB6M>wI>r&|)PO2xrS9iPy`VbBUPs{M*;`xm`kx3M;ke;=* zm4r;NkGu)PRgNlA2>$D?=CB^)z3d8*3gRBzs{4^T3m_Fr+2$mg0cv@J9dXDlAUL|X z$oRzZRAG-n(Uhr&2`%IC&6HoyknUqXwRRuH3HD~OMveU%J^Lkie!<3jE4^@Uu7o|P zy{$WP)4*q7g*HCESayYHEoZrU)ffg;;DPcV8%);g$%&XSK!Uh(JjvO|)ycbuGhIH< zB%RS^P1LnMQzoPHO0S279WpKThYjzs88x80x;G;OBhBdr8g`=gg#(A+L9W~c0%uJVUCu_jD1awRImi`?{Up5mS2I-BCG@n2cOFrV9J~LITD8unYSH4 ztxWN7Pi0&d(fH)?=@dWco`vX7ommdgMxYxW8B!;|!l0Xe8S*FgJ2bG2`PalxU(o<* z`&8vvKDlCCVS=QI7_x=}!#-{;pH=<>hZ0TR+66z!MY+l2 zPS!N*Vdb4%?`YfHmxlqroY>HzJgAA8Ss$p6+WAMSJ^*!wD?3?(Oge_=?G90kYkW@2 zln%{6E0d7doZU4` z&E)r&E(D9k7bN~w&WLyUWF*|zqznj%Dky}PZ2Lj(HzUEO2rJ(8+cE~@9cl_;PzaN2 zJOqZGf#Bl6pY-9GK{J||ym}j}lv}4m`C`~W*v%*BY39p`dYQ3)(81CoN_yEAE!PEd=$1iJEQfWS&cHhmNpLX4L;(X*3sb%azcS4QW8z~GD9@KK-;es*UObebivITx9U3egI&eLab@t(Ac^A@Dj<}v zL+-@_-tn~k(GxpzuGY^X7kk=a;*+G?L6%i0m?c0#lxOUr37$L^%cv{wi;@9PEOCle zkp9*c2`mfJ!}d9jr<SfVD$ ze}+dqPYPr!aBTR$%6mKY$K~6o*A>R9e~onW%4UtxG9(NSi~zB(r2K0 z{v9s1NPzQ|rlzsgxjcs{UaT3U2BWm4JQj#!b-E;9hOqD;wVUDsp*KITj*RB)A8i$+oR|tv+Wggn*;Y0tdOjfX4 zx#oJiW3~Q?^6*=8jSc-!kKIe;fu~@-hGMk@if*#ncOEZ5w%Bt1%vz+{eWS(h6i&OZ z2KnFM&uH(|iB1WBFu|rppauLD4kK1SaeSg`H`i?Cwh4bFyt@x>?nb!&%69;!ofI2- zJE0Ar7IupE(nVHW4)>{DdSSu(%`?ykA&^ zS+Co_(_uZ(e=X4~vwCat_mM9hXSxFnI)2#>?w27N&>3l_9SC!#fmvF+{(qMCeh<%c zvRH#GMQO^lk?ytN$c%bvHB@{wDnYbPJ=S=)kC}bZrqCEbL{MZ^k5-GhJ-wf&9#CHX z7ga}%#-=#fk;52?oU&l4kM3}|G||+m)#gx#$N^jh{|-UImg_;YtjOr!CAu76^k*Qw zfcAuJAToV;e_*LTIzqHAsn*>-v#EmzcKcvX`AKaqXwFEOb^%fa*j3XOfS>ghPn;wa{T9Oar^R|`AY>8?9)yAemQ!V9 zWJx>55^$A3mH^H=7Ug(d&xx)n*^!6BX7VKfvVJV?IHwLiIac}IN&%3ZK+`8|Fi-(O z%JuOAd1ky=?u}qp5-pTSFrIA3VYbn8D<;iMDvDNr6OYh-V1@%QitLC5KzcT0z_?!k zgT#^H6|eTI7R-=6-puxSs(|lP!f+p?175{QbXQ>O9z5MS+T0tn!o36&3b)c znyO`%BGI@8zv7p~a@N(7Vp}pt3j-Y^vbbq`cElx-BuDo;ct0WfU=ulISBXpn5WVn# zU=IRz7s^J_L5>UEeLX4Vm?Q`uKcveyw5_2a{S9Rre0r#ex(5>@k6S!$;c)pgzJ(>9 zOcX5!S5Oq|c7n)1n-B+?g{6f&s}E1$&x+J?BEn zvJIanzue6``M^J0o=~w@ivg1D4=OV37u)J-l#?YI0_~>yt z9LIlRCeum#D>7ZYGTQwE0t_l_YhP;sG4;5|Mm|5X#aoEyrKF{tG>%KX1KnP{pHtag znLdN&(M%-8Op35F-=)eLUMhSHg{;Dt*qPt&3>FeexiXTE0cH~{AIoDz2Y?8Caq z@vH;a^C=>%U`!qVtV^Qm;^vTA+y6!1#Zkdd!B{OiuaF3rBZ*Q$ph-Uz;uz``KLv=6 z9SvN>|AIz1(4T#_bOlQR(RxR?AD-<%Qi&wjt_(Lj7^qxzOt%*;QUcvcB_;MXqTIW> zM$WWVAh+loWo7$?Yqcn2z3X#KBQ>EBwba(k_SqT_b1APdpyZx~1WU>-e9>HB%Za$_h9GgK2xn{686)CQyIJg z$^-(EQtF!aR!Ujgt8C7YC)DpwO}IeWv7;*N4NNwXrA=@u3a6h^kFmV5NEjY?7=vrG z_9oPwHz!SFyNU5`5hRu)B-fZ$lnVypj@lgQrU;*XDks!eE&z<;;DCp}pKu+UsWc_! z$!o4xf8e@9Bs;Thf#KHB&r|7_>ey)fOPN8blEbnvSf&)_0j4E^){Rq&(R!!HU6r-7 zBrUC*@V8%qvsl8j2sOX)`PCR2>9QP4h&LGn$0nv2?<%A08p!awl+d-iMyc)|6g=hI z%BRN^9~MG0pmZii_{ARvOW;5=K(NVvRX9Mzym+g`2i$d;CEfm5^jcwrOfOI`mo z^PyiLwfx)fKKt#C;qApNyitION5w*4#c+rq#!|yPA^7XFIii+J=^MHVDQ?%%KVsIVTw!UV7w zL&(yUi;v2@7zYzKnRMhhd(?NA=cO?sqr_Hcda#4Jn&&gPlA+MQa3osJ3X$CiyuiPK zlygElVyXmmvB3gM;NWONfNrIz%y)gRqZqEz7&<5^82rHyRZxA7L^`2nQoFFe$a_99 zIETEE=6l_3BXgh&W4}uP6DO;F^`z2JC@q~{iH{4&Xj}1F(Udmo7;7q*YJdj^$pWs> zL20=8m&TQmC?E3*`UO>1$Mdhf>!&;w#7!bp{A*oj5Ab}xr_%IMvp~Hk4&V^IkZWyR z@dVj*a8x)RT{-F14VKn#_1=Mr#mdvj(N(O(=wOu=-ZlT;Jk;slYO5DdO{YB)0OmSEwl~6m@8aGH587sLcIs6!xmplGw>mI6gaExt#LCa$y|PrU zRi9Qv4yx)v>AiH<%DGCaN^U-k_dPnqW~6*MLQ%Dv-48Nr%gIKk!f2Vcxq{ zsB>66$$)NJi6tGVm$%ErRxuh4-*4A(3kxWBKvupnMFB7feiGu*8eD5QX$T7^s3*mZ zVM>XW2}iaCLXh>=2h|xdIP&#S0I8oyfsc=M1;o)FDCdyDKttlFMchg31Y9lQOg&h* zmx*%}zkye}Ct2))o^W4G58VnMM&<(~eGS`$qr_aaTk*7gF;~2r?&7

$(efiv6jA1?xpf;MUm#TPlo>RaPKJyqAf~boBZKkTcs$l18aW^ zehq3=v~#cqL(g^!+dRVU$+ukIWSnEeEPPSB5dmP~zo#Thu>s<~RQDmKv};?(jC||H z*}GE+U2LR2P^r4UBp|PZD97#(A>QT=pDJ5x)?cqWnsn9Z-DEDg*!>aeop2M?Ths z?6U)j%U8&?mYNMbP41_*P5TKAJVV;1KkpXWynnTJSn_oKt#p(vT$y__+}kTY@1LL+ zU5E{ch&JMZpfz`v)Pmq1kG5t%lF&N1fAk0?qju^V`mbxHaM=f2NH1pwUCYYkG8MphDXx!A9!rg#2(Dm2Btvhfasp(t$gz5}N4w(10(xknlm$dOp%pI?50Hj{l+>#bb@DBSa=35` zKzYgF7bY>&ER%0Gu>|aj(#K2U?b@7*vc>e=s$SS!;}om+mI!Xz_F6Bp=e{ZhUo%Z- zWY!gS)pK|*WEcEvX$VJ|7L21|nD&h;Xc$nO!_2j{qO>dQuluE=XsLdX<9e`Kl3(~4 zqhVOzngrZOtS;$^B^LuH*q@}a1_Z3L>Z~961NY6xIG6_AqRnqEUlW-@e+%0i?7v|D841H)C~8zWPu<6#Yiiq4LyM^8@--jHV}i1laudA3|lv z?)AEC;UPm|rwyCau>tTR-WG7ou_$CjEhG8jE`KY`PsvV+StB03C90AO=Kr_wd347n!K9R*p1dbt1Il zVcJ%#7OOoBbM7mB7q`8n~S z-036lRV{GIlBHwMRnEW2wjl{UTlZi5@Ff@PVYe-zXaDov=3W*k>;16|c#t{&g2N7P z;R9YTGdr@C2M9EXmGAzNl9>I*eax+V-k(gSp!eF~%{zqOrV2$B_!7*3T|GripV=B= zuI6|la&}do=n+&9P*SB~P&puG4}4{jDc=}tBmpj0_&}F2ObSSCW2$FB7N=YcHM|mV zI`ht0NSKFFDLEv(;n=#aa&tv25b3b2G7(4y+Rei2%pCwrLW7klbuj0jQ7kk-?!y>? z0Z1SS+eARTzAF4xy%noUp|5e;)1^!FFZ04Nm09L$6;lA7u6FU~2IxwP)@TTJBmBg3 z6%(^>Ml9>i{nn7O* zi%2AZV|iLI^yz@HS@-G<_F?Eey=o(m!T0$ew9gN0tLu(x@8V-o#z~bvpd>oVqDo65 zfc_AIDn)5Yjnb|2?JFx})UM2!qk@`Hihk$G>6>b@rb7S)9>gF*LkLMlIsVkmQ0sTB ztlYeyD!mxHYs)K}7L8KtOS5Wcp2TP6yCN}LIWm#xI5)o}_ZmD{?pl|@d!%P7kNt)k z&H4%i62!?TDZLiPVyV4VxVV9Pw(ORATMkbEqVN44A_kX@pnpdgS~ z%q3Q^ZoM^Z`6JBK?nFJ>2JR}cj>&Qbc1=o;JGAflg7W>Lya0l%FV;qc=9o3l~uUeFN3WpZjljEtKV)V>%U;dP4^emoY)8FWWse?jKkcu1mR>{U|Fiu4C3 zvkOb+Us0BZs*6f~l-LQMe98k#V`xC@X)n(x|CEj{*h3z;dA-XYjd8$>3QBqMwmEET zy#i7aSnm$}|Sx73BvIpJLbJ!grTYlp^7L0Jz z?TSa6hvoM(;QkhV!mG4U?qEJhj>ecvXuL%@EBpiRbwR)`#j0OYtE#14d?#{#NNI*o zYRBjI?D2wQ1M9ok%jo1M)Vw?dyg)lb&j_EE<%70{*RKQti)4#y^WKARd39C4sH!;2 z3s4fJ2~Hpl5gd#P+N2$bTUdEMjduw2aJa<>rW`(N^W59)cK=pY601T&wTC~P>X}ds z)iC(0NmB}bm`&+~9@Y?-e7pjK!96v}{TnhIREezcdL(I6NDfh&>b&^Yt)qtD`L}_H z%tf}nRp!VmQl{+pGHymrA)^uI0{KH79hJL$&av@&lHc@ptCzz@nGCl@pr;Tw*hJZ_ z10zOZT~FS`^5vH50#C>wk28OawUJ%PZLXu$ZSLh-j#R+zz9mYMV>&gdn;i@eOqyDh zg8jNoZ+VZ~P?cR*O$R9edZgefr1D43q&k&d-I&9azH}IN4+_nXK9Z2qYU7ASuXvR^ z?+Oe9G_6DkACNy!f}o_}TeN9@Dls{|E7GrY@RJ?Ldl$`z6K*M1oH*v}lL)1i6A+po3f`0i`{B`b!^&YHp>R1plWJq|#L;*L4q$R=B7u z?(p|-aaZa5?h5F`&chszlK@|a6#Bwn z_fk6|Apk*bbE3}Iu~+zWQX#3k)Ar>s%Z5a_<9Y|i+@2vhkPjFZo|vTYZPSPkJx65H zBP-VZMbwfblIQO&yt;=MWb~6n$gCz}a_7`OV=B%;L{_fZsjtATAw$vQljNt=Q|HRK zk8pr(V*}M&lUIdPyxufuM16OP)}rq$P`Yo{Sjn^|Or-har1YGuRt>Y3fl?|$!@ROy z)BW_I_N`EKUOar+95wJ_Voh)e7{m@s^yusW`A0k%6I^m-Ai>3t`pxFvREM~=PCyKy zz^=o`sIJ4}!hIO0Gdf}MZ(0+a0)mJ@g2m6BDGl@(y#3`q*1;GKTXoJ4f&)~360Zv3 z$str|@XM$LsYcU^Vjd+~Ys>7p;@`Qe?ER3PDo|fvpS@MnYRPN&kj7OgYNxSfjDYqV z2zM^q;W1oMi<^6|Q z1j%6@Vd6qp#8cXkuvi^LsA0seRZ&-{=yZB4SNW)G7JAzon zFytqRofd@#9FzC$7fUFA};jdaY=(%m7A(mixbcelV$(kLLEB1m^j z3Jl#K-TW`V^{)2|Yw?A}eeQEl?6dbi%+W*)8t>hxW1x77isU4mD_&FXH~M<7`7MGp z3>0qx&CMEK9-VrRWp)#3g?Gsr-eg*UsAZEq#i?*Gdi{GXFXLC+<#P%1xDK7Kiw!HS zdE&d9HSd;iy}rxjrltQpCzLXYb+$xfeHjQ40QIDZ${5$h8TDz2#yZKp zk7R25JCU>Y0eKZcFI-$rvGnT9y`n4_oh1Vx{hZqp&IvS+vPWnM&*R&(bRig$eTr6@ zgn0%XfVnQ0kZq3TI&qbN_hOGCR|&S`1!;rDtPsziV0-a*>ORY_h50`D?+SE9W=8du zqt~m>=9Q1v#C0LwfJ9^IH2M^m{if(N&|!k6P5Da8NUM~&hu7q0-@E|hxrlv)V1UmV z7=tR=0`Xl%S;@gIbk)4TqjLD}mAEzf!7aG4cFXh~Wz)a{`Q;bB=5_>CY?o?fEn`Qw}@1hh9M2=8AXYN-go;4QFIx3K+%Y9BLbqPAAivrbv% zw;hpjkc7cGe8BZ+$GO#NPpFiI_yPz3<#eiFC6)>oCWiZ=p06xaA%>{26Y(@ScPTxwg8VdCI5hy#=Q01{ZYPdy7Y#_}?P+>o}!rO1=@yg8J+pt^q zlZ;vcgTAhW9y&-;Qj&vZd}AVPp&u%Hgv!AHCW?%SgClLnRbk8do`YE{_R>zA(PsMC zh90Ju+>5A`obh4~m9q2XF=*dqXSQg7(p1e0Lf@foNQqr^}5iPcpnICj4c2FrbsW z95YVNJ#B)-a9PMnMUW|o@p}Bn=_}~z)eF#O7h#z=Et?9S5^3$%=7Ure?h&gfJ9)~b z98L$VrQ#8LLsAxoNTOb+r*JQgw+*Z%eOFH!Tq@ecD>LrED`SfogsmF%hsK;BNp6F| z+zauYYWtpow&`kr<>1O5f`-Qyr780j7gT}>Jxs=ffLADfA=$*x+Cmx$Q_oJnmqOI z8GkE`(2SDfJHIDKRU(l1tA?cRhs`rc%rlq*lIB83@Y6~o59|U`zVP%a3=~_yLD=8N=B>*4JznW7obNJc6YOcA{+XQ`|RmI$%xsa2z9gixzcafSJQDgd?x+DJo z(k!GC;dUB%wrLfa4vS>O_Np@#aU`-D)%jdQNa0|G04Dw`ArEyv@)iInJiz&Kuwj;i z5Z*M5!Xa}3$AqnyV(uGcyUg7pR|~X;mmu0;;HnB6VAQ|+xs(|z{~|S1g@6f5*~$3` z0`8&GgZUmLpd(hJ?X-d9|7~KtOO?l6E0---a8`d2Mwl&Jtw&8b3SCEu^9U*Mlf)q# z<0?tp0Lcukev;E_RTI2FA3C*iD*hC%;!%wEZjYfT=8W#p;wpFOH&YyPf>d;{DXhm; zS_9`q%w#8A^lb|dk=(H-^l0uA4N!~TRW4dwFK8HwmwoRqYq~uMOwFMNN?l_=}TjP5#|k(d6IK%wP6w@~gxm@TEWPqJ?#W zM3K4TwNORnHS$_}T7X*WD#2|0JGT<>Bxqvowhx<*5+^udbSR%T8;&)`Q+qizzFBff zYZP>|UN{Hi*}(7!p;MQMeeDuN6V4cgio(#OMjUNL%T}frq81ptV<^z|R zU4?MXv5qy&1{`J#*4T^jj%#Hi;m|UTIF%`V!y{j_A?rFg=ow&drQ+83;6By0ogt^t ze%YhHoYoe{#O!(hTff!jA27c8wfMCX1T=^`Z_t|S0Yrwyk!oX*v_>d@FG6CAKt{ii z4Pj;|!(qfzhSeGIC#yKnT}4QUF))LyrP(diqcz3U;1>3-O-i5A-#ohmOp*hC>kaY1 zLF6nPgFgu35)zERgz8Di125>+GO5(S|0&pWVLde3Sz~WZ=6J(J_aUcIc_v8rD(Uc^ zVg(kf0V0tb6N*Tvc#8bUq~9@alqhXxWSEq}Dqt0|Y5(fCB1 zccUq+d%*$1fuOIyIazQ?9HgiPEx~*Nev3%#1%Bl%13Dy%=HlvFZ_3wjknZsr&BTd5 zg+2WnZ4F;vUvI-K)x5h5S5Hn-WS^j_EJa|puIVJgA*Kx=%X=?Lr}Y8S!x_zrvQh(? z`r7|)t~7imGrl?CM#j+&hpAGKwHe%#_$PvBmRt}N2ps;#3zzjU?iP1aI^w3Oy|@Dtny#cfjj(Ly~um_~wA~kps1x9>;8cT=IAw z5O{PS)Pj76wy0QR{)9(irq1MO`qs^zqX%d#v59Ss*XSo1VL`UX*_&|RvHh$Lls3mP zc``ls=S!JurcttN;>MJUKu@}5hrDl5X~)MDfrd>{NQnRhNFJ)dfOiO6#4@9)&=|7f z=Ihg}k>#pibK`uAg-%9TrddEhuT@FDYMA(hA5BoQKmGe_59R~7GY5}0K+F(n?hNZ8 zeltlurk6bU?h%LS254wL1dwj=EURmRRVs8gg0Zqcq>1aq;9V2^BtF} zuOVEY$CvYFC0jgBc<@aH@88{({s@6IY%^NQ_9YmOm09}ay1$=qX&m%kjZF>YaZ zl~@!N7MdCsaiw={Jbl!hWd-!!^%xc^ZS64_I)YJDcV05!1z_t21=97Vre8n19KBRj zmfxeZ9DRkInqgy*{=PKHb1CY<*L3MeKIt;Mylhl(7K}(lMJ9^8R}kro!$Bi9CeSh_ zXp!_VZLu=717p9pN{E{Vs2sd5&SC4xSwl$d)i6IoGG-R8vKS%^zEbA8ZYoqy%Dl{k zp2sflRn$bFD`CO|Oh2Lu5VL_KxrD3wx378sRgyFg_;Y8d1gzY2sI$?oa`Jlw7l5}& z1Al6L@?ez*wg!G%H`H!NSd%Q$t?;!l9A(g4Jiw?XDY(ob1<5%KIA}X{Aoi|TwK(k7 zjkS#)pjYwB9HNxvz5u~*=kvNL06IdJ{~nfP44IgsLMhQM!K|f+`YbEAIRJ7f0K{pW zDQxte9C-$KpO`?3Dhhz7|JcrkQM1(?Tdrcv0vUw=t{?N^B`XVOt71QGO12I;#mivK z@~})=8UK5m(#ohk%O~+Xt(R>Y3Q%?LMiTNS$^akKHw08&&jpJe+E-!V&MSzybEhB> zXDk2{Jhb;|F*DPzW`K$0%Xde%{Ww_>eWZZN05yPaM)Mg=fpcV9Mej`Z39jBtMy>Bo z1SdIkBeok3``xN%8Q~S}<>4n|-Xa6+9nPUwog~Uq(@q)Ck-eo$!6W7{Ft`g-qhyn1 zfC&v39;TZg=7Y#{+|L=eMU|$0xUHY9VL%a8SgGr5ZegF<SHuEARbz!Y!)c78*nI zT9z_T#bo#_uHDt2H-j7Y>+NZx&>)FJztD~Or;AMUQhUtJnSY!>R=2^_pmQVJ|8P6? zP}t_F&lDF@Hm16Rg7_1O{wEy?(SdoXOVyygWT2cr__!h?(QjEjg43hl;G+MnY2-6Nqbf33?A7wTcSS6Cdx%`8Zm}Ne9u!Y z{vBlf_Jk+kQf|{YOO|tGKfo*IE&Z)pReUU)Y8)b$C-(g(Dm-r38~f5jYwXc3{~*P^ zy^-ej*)TuZp#nt4cHFk2lPR5Ey5$}b!>D#v&5J$U)`r3ToXY&_?4qomM{sL^714my zD{^c{*S#3by_6>WE>Xa1#ceT$;F8*)QJq6yA)I-h7%2Esw|`zwrf!`y{_3^-Xq?=U z{LA~B#R%!Q3zdGE$AgQl35I{8^(ngVS%N6dWmZcswlmC2+~R*fSZ3uQGg)>~v29Mw z?;(dby^B`A90ml`Y1Q_T*ahk<_4QH*vslr-U|KdkT5E;U zfLuIjEcur^m0UmX_ig+N0d0D2Lj=OQmcj%<>wJvv?(`nUi^ES7tsbYTBxtbo)Y~4` z^ZsI<5-=&fb2-2)!};*Q9^=HJ6iD9Q^&u7!(y1is+u#=FJ<@q)P0QTdm=F4wbYLT_9#Vw!tk;3nanM3hNautX zU@Gl8v&{`LH;}RJ!&-MmVFY4=qk3m51->=d7xE%Cl_Y1*#{_iSRP51P2g$c!54K{IsH|)p>^D z?I{#vZGNXV zb$BcjOruyB<4Zgv^ILwJpV^jqEdTr2;sQ5&sD{_M0z5CF{P~=UY~WAP&x*swdav^` zT3`|jAV|OR`@>}Q0Rl?1i1gu90?$*X3^)6=w;w zP()lx82}d|xf{lpRWj#?hUvpIK3{{jF-j!=5S6nbreU*77{)W{lnF{3$=Pe#;eq7& zceJEEe83LricR9_4K065> z+IlsNRgXq;nqL$GCukJ>4iW50?m~hXC1@W{*9+C{03v(3u4T0XW zXDRQ-llUy1F>nl-rFdIVp$h;6WvqT;*AsaT#E;t3`b zRF#{%j0b2lPb3Thmi;VQ$e)r zXL7jh+{YiMB`35q8ZP|w$_S^33vav&1>sV?zZW;|U1H|#8~V{~co?$eU1pJ?Q)yq@ zpwF-o8%2b>h%YT<)kRG=lhxn+sMyXDk#fh5KJeh9{>2Ue#LYQG| zE!-7ICE%I}|M%1NI5Lz86bL%(q0UZWS#NXP$w)@s`|GQ87YOZn<-a~WmnGp(vn+Bu zNkMqSxNKRa(0jbnIvz&Q>Ol#vOMcoZxMI%7gibGbt<>5kgTSBA6CwY`tViLLet zmX8tzYrpKwdwpL`#(*)zp`y4P5^ZI}SHsy8tK&G&j6M)PfSH@-;h-SaXqI0=`Z%{$SPNRR1>^*J>}U3mQr#eX3&mjhd8WAO;%)X8om#nJ&Nync zWFcCd{?LFS%Nzo`FzzKAf;wRMh0J=*%ifpj~hRj#gkDA!Zs&i880aT9~zOmu4$ zhbo0ZdiDAm%o&@fZ2$bK7bCii0E{>ssl_8_QxHW!vM*BL7JFqY4sYQQ%aPygv$##1 zPS5j$uV0Mj6#?x?tl|cNj6x~3J=za;Cwt>zJG$P#>*VV@=pM8EZ|eknlGJ z^N_AxMQT79J!SN5ve^BA9B6-K0wBnAKZVMN(Hv|MFU4_Jv)6%;m>O(Q+Ae$%Y_8dA zGQi|;dA;di;UME>7#Fj<1>nGYGIIB|@tll2F9OAoc5Xt_q~3kB)(m4!r=a5W^Rq8G zJS_!6jP2{sBd?e9$=ipg>$(5@a1*zS%l$m1>ZQqm_{K51Zo^XCrO%z-(~Y@K3+wQG zo-ZQMUWP~*$Q7XJi%}v5Mn}XD1q!spD2rW~yf>d`NDU8H*(g7j z=#wr0Pd%PKT?Dk4TIbFY?NEl+onRzHCS2$)s*HQ}8!m{X59=g}gO#(jVQn2V=EcT$ z&?r-D5$^ZOs9`m zu{m`QPHq0P-nACUe$8o75S_^liNv*HiZ&5Th3tK0%c zbT|+36ADy16S#9j(*{QUiVTNbWy$UtnvX(<=$>rOfUf4T7r8n>bXn860SGvRgJuOl zv;(<>_&izuASkcRIM&6XfUvEbYvI0g5LAhBk6O%}|GUmEy7sxz0#61YO`iT*`7_Qp zBY6d_gst^UKQ=R@-*svBA$!Ntbb#On!pAXFzg1W+4^q406Yg<7$eAk?N_&KnajCZ{ zNA^h^%A`hTpY#CdW}M*2A5 z`xm2RLG;nJ7REIuEzHsQoq}XF3j7F_EJtrA3sh`(82=<|owm6cq^!xP)xoJ1D;_UL8Y)dSW!m9Sfxt&~oP~ zel36=25gDM_w8>tM4Rj1uG6{nh5o~SSk%c>FlOTT5{3>Y8O)>5rP-7+sZ#Q?UaC60 zI)9Uo^c+BWP$Pa3lwM~x_&<_jnv_!0K+k&|tEemcU)v5QKZsVh9Y8oF%=DGk&6IR= ziX$e=M?^eH6W3^i<=M@?tbZv4@3T59uN5#n3))qZUi>8ZT8he6(D^THt3h#$(Gtw{ z#W2@Q|E+B79Tz=oRadb2U_*8kCJeq{jC}N~Aj5wz4hVrbn3aNR3W9^4a$3%$MNe;T zf0aSVh5y~!+)R&JHwfpY6CO-8=V{4*>nbttpg=q$NwzI_hu+2M;n$aALKk6(D>os^k)AJ8sJi1B%R z$Wgw_5qRS$IHM8tJZ{24TJU(8jPnq(Q$Rc>5)_K+L{%JPNbw4iyb#D(dhv3_kr;rt zYDbU60PmM5f^aiw6X(0Ku&>=r8gLgG>pRtt|Lj;X>+D2AL{pt5qZi51ysgFA)#O#q z>GVg2&Lj|Z&xF|RXXLJ0m5e7gs_$R7$>q<<5f+Ut z2(H6(e$G9~2X0ws@pv7(jhuH`k}a?$ubKFMu3T6-4Hx23cbjvm8uDW6|H_f#XBjI9 zoKiB9u76TI(N*#72Qbd-7qP0x@H-X$yGC$SjCKbJ8kQ3c{Y1;afa9`IyAy(oW!t}( z@1iYDt@F&!5NY%88hcaSO5O~JEbES>LNnYMDi8vtZsLSQN#h*KM4Da zMD8Pd+*7pveEvTnnX?bCtku;j9cx>=E=FUT|5B6{ zA!|N!pORYHjskoV-^Jl8ilQ@O;SPo@B_&>-*P4r*X1gd6AzNefmqKn(;Jbs&p0QNU zyL!Q{3H5je|Hnt3G+$boCW;#ta93Fp@z}JoPb`ap6;ib**nX%ZqGV zZJ&-b6Z6FpsS&O4jDg(~Yq#xq!s2mYw&pX&Y*VNvdG+}mL;5O61V2slLXO{f{=BU# z$7`p#B#okfB4Xmn&|%C-#3Hkr8^qKJr~v#ZswyK)c= zo~2SiE~=d|M}+xMgZRuImOlMmqoIEGJRRA=U2~q9`;Uep_n4E!&TfA_QI;|(2`$BU(a5}+5u(LQ?1)EZ{);%M57 zCS3={>h(@=UByr@7%D%Jagz@F3xIq%OqL`CB0Oj`q% z)YebOtDUTe|46HF?Lq!jQOh<=vci7f0aiLb+5X{LBn+0B;=J z%B-K?{if^t2y`ezJxp;&GV?#JcLF~q{>J5H;kn^>sP>Xt)YFKtih=wfCnOwg{Me*f zhK8~Y`1932lusgQ0syH^z_j@~Xibv~lRo6VmR3AdN+%Uts2a57CEx*FjlsBEis{OW zK9}2A`C5Qi{oF6AH9mzI!J8?}n7K$mVEsaVnM&C_vxIvU*rU+_p2NHj@l{o z+8fr7v=*CSw_bMEto)Iazs1;)*hCkLVm@R{Q*k7 z1(bFR%rcEuK&%B9)Q$uc46=tv9Zs~3>%>nTw(eJaevJ;Zv zC3f;EDE%SDan40Z_jiu}X`>D7RkQTQTg!?Tt)x+?O=?zg+|V>m=;P_CZ;;2Fj?neso zsA<&i3s{@~Kx#E_z>5TpNuG*)P?xUMf*G_?Ms@uyp4Bu$-Mr@tqyDYLV7ZY97s^St z?-kBy2)vm-z-Tm}z6kUf2p8!Fci<|IzHPol;)2F}n`d%(#9oBJ{haN;lvi7T;FBoczJ!%lY){g6j7)E)&BFekS=SPhdHfcd9LcL{2HHc;Xua(i*q7J>C^`X_YkfT%<_i|ZjX$< zH;&#o9RR#bREq4CnTjkqTB_(!Ao8BNZybpx&ajHUs8yxEroCm@rl4+?&ICsEIyk3o zn$0yv?-;;Y&vAo-c}6pxx=Rf(k#j-Zg>;wMjl*zgf9I8#%S_c^-=9@w^1XkMMC+hp zn+R0<_9`6An|o3OjX)n;s*?eCXW%LPdIa!j9_*Fe$tvr1g^UgaZ^!U&Y-}#b0So@+U!zLLQIiI2WUFUA8rg zrbls5vk6z{mW=vDcpF{tSq(qAI-y;Ev9={3Zq8~@gVVoR>5Mf)9}CHqGptPCWc&I% zQW6RZ5?gzgV4V2YHk}{h&?fB_l*&4p_B)IgWo2`!2i4`vIzgjcf;0Ue^Zjlqn;ANC zoObA#=-dz5OWNor?lgS)-j5C#MBL2JG7N!b!hs=qQ+hKFY;NXhq4zutTxot*;3IX%>30YB`n z@!XBW-$)9j{<}NaRM}$>mXDDC;T)E{)a4#lwY@Q4#(mmRu#-qyG^J>w@r`@wyITm2 zCD=``3-1fl;?5txC(Ep@18gR#d>nw*M_JM|P`nB{|>9aPHFbYnu` zZgYsk^M^F|e;?Az@Fqk0=IwKV?lO$pHU#xZ<+6j9Pq#BE(*yG9H~#(-5^+v~1N%$= zn0@;Qwn;L+9mB#Ie^`mQ_l~q*|2NdYi-b4PC3K-@5THcC)_+VVc$>{d=Pnr`r{blG zjgcq|hZ(KV&Sn1zCm1XD-Nk4uW#2mmMv#^ez!(5Bp*>x>sQgOTFzWTyJI4YxAat`F3JZNny1$nMfA7DXu9QFu;|$+`0tyiaxD|i+>}@+CLke zd*U}fl=pgc?zB8zwk6Y}PHniAb3RHn+Z|$Qqn|590Y9f`_k)$Y)NR2&@HmZFBK+-R z8Ch%UI+nRkI;9LUvMrFF3=-a>Pon*$7~MXj^vlP$1W=Z3j3S!%&uUH4QTJn*)c193(D3;d>sd zFCBeH4XDVu=^Ec~aglx6j%1INr5I!pPCcbAEqudy7QZs5cy#{LHT1E0_S(Orz{=E6 zh#xT6t%uwP>j+&XE zUSHI_Lr{Wf;*6y}z*POctJr0ASPzi!rKyf^rk-H*ioTp69_RFv2Vfbj`H)h_Bk8m) zw4V}8*6nlS82~vtEDkF0Q*N|1iIrSVYZ`&*K>c_Oe!sWzLp9M3)|K%=zOai8$EUuJY}1aEproWGOmEA6(ulZRPe?1o%QrrO#Wnx}vAXFL8act}dt*{tbG_66M#1*7da9r!2?<10dw zph*#6k=(p1W{3vNyC&sCUE2O5O#PBhG@4mPPxb9ke8CK~>fja5H@Ut8I-JeO&F@AI zi|T3HR1DxKjO`U5&4;vZ|IJ^J-h3-XwhPa5jva+2M;}`i+XHMVd78!xrZwIBxx?J$_Y#sK0x*zo_TBAk`*=3;%`FEV(l>0>k^R9=YGmI^dWBjjun0V!cg* z&Z>`bhKkC=HMMLGa7yqjL{pe|BhwB^f4WBa;9@yNVtq-}b5)5%b&~E^F9iY`fpp+( zzFS0AeV>L1_MP?f)(O3JxOi3`P$GtU94Bkm2dAjHf&r65Gv$tE;10g3a_Rd9P1QOY ze9h5Gj`3c-)6U`$uUrN|rZKKBapIixiKs5G)5WKAuO}mRDgUg;_oNGakF^i1-eDOZ1~nMKOa%)>55?*e;X742QR{7|vC zinqkBVJr^0(0TZZ9UD+RBH0}KjSDjX7thrFF9K-I0KYyJB^<0D^tedz_AOsIisut) z9?C3Il2e2R3DNEr4p1??Ct(x3iS@wNIW_Eh4sJ{Q8L9V(iYKp`T|}T!WI5#Zzfwr( zLr5Wbj03oF*DBb`{Iz^s299RmzatNyigPV9q>L zi7rZq+7@(C1&TQ!;kiW#dT)@8dh!(xJ68ISc69M(}YdY^i}4!0rKzQHw=5yvx{;NX2xs;IVU;-Rm@Y z`wm?q)h?V%Gv4SfPy(jY_C6GtuQEF5WD~CATnSf3h+#dC&}ijW3uojn{uQ1-mk8(Y zNo7p_{nlS6ZLurL2P;*B|$D1ThOMTD3+Z3%%fLmflMsBi>yVtX+-DkzHOYEoB)O=>C zRQ7DR$OJ(7z1PxiDOFI0Qe4}DyUM@?toDe<)&-=G{l;`}{z4a|6|;oDbYQn4#xAc7 zIr7yqu%Yb5?n?_{pY|El+ju-n^OKJ(-H$UY9^)}!Kk!3j$4p$uqAY(Pp`b96;O0RL z7S7UfU*vPSghV$=mgkM{bdAV0rH%`uko`T2KN77CL#)Iq7*=$ubb#_LVgal$2cBTb zuqicr!Iah&UR7O--A@q_J{gof~X^rzieNCy8nFl-14jlbOE4gzwq>{Y6-sLIqs~4DMhvLfH9QS3>N1 zOTf+XuBSL3VCe#`Rsj1$!ERt>0k#&G<0%{mlnwWrW07m0jk7XO_34vaEA5pZ8?Sh# zd`8XeA;-kw>9)Gq=5B+vmK>Q~vMh*GcVm3k?1_6eg(2t~eb&u~5{&LMwhhjbZ||KN zq#^1sORB}j9b|w|2{&JFqRZlDb!@w_LVJdr<$%G8!DQFVO#mbOif6(f1SsS_Vc&PS zk=Cn9Nw0zdV2rEB^~?-d(6c+ZQ_+Vs(C{;Mk}08Vk@&t?2ofS4t}KTh0RG@*o2)^SM3pto zb8SYBgtLBXfd1ugbF`EcQ82<~Th5LkY~7Cx5*bjP99!I zPkQ^WbIdZc5i!^+yx4p`n}DO_;~>EF37hek=j})!DI;5E0ND6?{VQg;6L2;~_>303 zyMR+xBJ-MyS&Afa7%S(r{Sv z>{Ou+oD9DW*i{q6FA_L6{CKXffFIZ1wBTLK;L>?8yFA6@pu|lv_;tD@o#Xs#LIYj# zZs+bHUKtZH@lM;pm}WdO^s6l}P&e?E;eL4T>`_)GMD0LXf91vVp-uX^LpSYXpCUD} zP~6e!PWZ9;N1_iI66=7XeCy;*j*2ANlZ|S3^}MjN7Uw=*qC8oU!OwXi1YWF#t;y^xB?$!FH`h;Y+y?fiSl=Tb6b#pK&&@ZUnCs+ z*EFR(j8wyTw@cK`G4MSrp*Py8cfx%!s0W!zccIA`4OtEeDi^qxRkeG^zfNGwEfUQqzqE1LI3LkpRk8PZ z{Pt<^+X=^abdFB4QZYL~!=wO>GNpBIJdnchLlDVOBn9^#a)~R05qYo`+(Q6>V*{h) zr=$(zdEn^KII3I=UsKG}Y z^l1eV)1PV`lO5=JIi{aqhlhTvVCI<>MBAmHP9#^C_VDM(*x zPJez>+B$4Wc(RkqTx{(oZMNPeXAAvwzQoEYMIQJ^$3Di0p^2-wtr=YOUMoj&-HIEMuA|B@Ba|9-d0hNC9z`462w**yI&`$MJd zL7>X+hIn8ox92VX3o~%Qg8htqNJCBF4~@8ifaydD8g=(Y;sE~>+($+-f@SM_0lx#b z-(&2vWk3c#rDfC2%CC=$KWdr*w?or07P6|}yfH4SMKAC{stM6Q%p`EvSBV*9ShgmI zNZJx`%U0(Y0!fX!f6%G>Ib*Obp0Se=+lU0 z<6$)eKtZ4H?~FaH%}j@s@Ta8@rg=CMkZ<-!Di1429jkiZU-T{hQ?$HiR5!p>cH(I} zLs`)()>!(|%mT~oi$I+(E|hf=;ui}4$MfSjSqyW`*z^XVsV@#6Ii^d;W^)O$-}TUS z;9xymX6K*3zE(AB>Qecc0$(l6KTXaR$_=B2Sm*!qciZg&*f;*yBe3s5m9K$i0lp+c zVrs9XB5|$!e0Ux;@HO- z|CULih0g%WasZUUk_2E6%`MV&uT7xJuP*DwhGYZI#&(jiWQ*=%@z1mV%~UJElw|Oj}@f^T2&2;PqZA|eiRE)O3dMGZrPxXP9|cwqMZQj+30;21CpB&2_ub)#T8t#1fX4-8XTUV5Z$$ehU6BZ(J6o5 zx%TpD>>Kl;S~1O4AK8l+VlU(*-)mBeDHN+0f*qOuHLs627pDhBKo#Rce!j*PRuqO#BsU1Q;$9q48?*Rl;+29^QbF_SEQL#0pSEgh z;+kUqF6>y*JWXAcBa0NYZe_Eo`#r@U=gEEg8pA@o9xMYUUw@gK?xq=~BZDZBM5yws z+gmwiWLeaUic{>S^z20C@7%$PJ2OQn_ap&e^MIKaRt}Ar3P|}t2wV<6%IC8YLvmZi zVR*r`!9fxZCLBY0%gQJYl8TbxVlb(*1I8Y1(MVfydY%16&xi09*#LolE-1(p26=zE z@7$KaX{nDtQqSXXdJ7d@78wMsNcak@hf1`NIhriPCo`|dyf`B!c2 z2CD2TJ7F*iN0Wma{a=nPl(?#Ng zMv#e)s(e1ZzwWgvqXldq=yDET?`EU;JSAqIrZO8uNi6ZE#!(C-1IyDwI|c&sao@5b z^N2e!Kd*qH$zL;l@ZZ#GT42*DdiBL5`qQQ9EIW-5n~~=?h)qE+6(+t3b_igP42>h( z(w2zLH2%$4@Ou|aWOTqr9pQSI$Z;By~)O3CA|G*-4A9> zo9ZR+0;=j1a`D33i&Uhrm@UXW=Q!zqxJue(<1+o6i$go6OxGZ2zVa`&#?uvdyIpNf z16#(owJoLHZttL1RUNqQ5->cjoSi_i=6)W5SGilS>}v0YJ_ECkPrSu#bLyA#XK$!I z)49I7yHDTWn~OW_qIw)Rhcyh*<`me9vPTPfHfh!12DoCqqWn!2Um5j)MHbl;cQfu> zCcBPG$+ZM_XsPJXNhjC?n2n{V0O%xzVh&VFoA`j#2kiaBbM>yumaQHL8^dS`G?;#E zY*{vyf6Ao-nz^;>cMjWX{xJ(-v>+;uzv2aid=eBu%A6`{DDN}sA5RmB&^GC<3RyUy z!8PZkr{+cRs7?WN+-1U0c;q0Ti7}4e!kQIH<-liLwR9SnWDUCiPWb zb_>_X{Wf*Lt!|1C(s2R#g-d}jfkkL&A&8myQ8K_I!FB=Idji`~_ee0sJ?gJ!cP<}e zI>M0g-O0`PW>Yhi`?A|Tr-h(Z?shH-8`7gD@cGiF7GUAaW!V&f{(4M>=X8E?0p;}A zMQlx_^*-$ESe0=c(p=!rIfd+hv+-Kq#n+c?kHRGR@YhY@InSG*hD!~jXwV4whV-t| zy!hwi>C~)gvl3v!aX%UE3b1-skQN997yy2A=<#RYp>PS9kH=X_lvYLUM_rS7FpoT2ADv>m733l{iVN;s#}$ANcq|Rs_hvi{@VXw9UgLbIW2^( za+e=^!cDtiYc{&lsYe4hcg~jvVT{WIqh_W(bJs~UphbQnb+woFK=7i^+$JYillp@| z;qc)Vakj(}wbZ*131wN~R&tS`d12qUT&CFxLrR=$XtxQ{ADq9>&Q)TVNZxGzHyO*` zjHCJ$3^&$B;l1af2zQ}cx09yvC}6heOi zf6)UCi*0j?w)9bGUj#8tZ?hOh`R-y%J7WC28_%i1U0T_bP?odfmHpA2Y%GX$_sPi$hGJSN_&dkvqMjsL_ zLRoNM*-oLM^q9$k@GGCU3i|6jby>@^Y`MNG&DVpguT^_7Z}IFPeZuvaP*5k{FDVjxK%@I4If=f$($CI3~8zh^GQk*7=QNR0Jg$X zeAYxaZ-dvF+3?EodYoX?k?jWO694h#3eU~BjUet*S$4WR?-7356!!Vj?JTnH8D=N7 z9`=T#wYvnxo_65nr75~VnQrc!hag%;^1RnPN@jr`3@+k5wfENCYVg$McOe^Q9I-Il z8%yxkxwJxljh|CZ*@u(iG*EZ%K~qIjSu4?wBwKQP1>y7IP^rUae#BY(UiY(%+;?8W zAOiM}6Lff*Pv=Q{^ty>HylR}p^Xo|q)N7qX^dG8R_zi5i-j4nBJJ8xTv%!B42xJO2zFlkfNe4_oQaTdMq)56t zve|N)@tXRaTNX<;)vb-ZG6b{HSj5gI^T$!Jo?WW)K!}9jy*`YZbm9R_5?`Rm@|&&4 zT^o!~fZK);jr{@!X`Wf^|GfHpxD&i#ZO_-qK0R7J^_Et2jT`W<23)t~k$tGTXlqPa zx4R;`|8g;a+XCjvQKFFfA674tN}=V+I^FoQm1tX#S6RI#pwE|Cc8zm~_qoPa^r9!1 z6@F_?<;7)khI@fk{yJ-k@cw^?p%*n7byaJW3tNRpq<_M6S*9bG4pmLZl3qmP$u7<* zd`r?;%Ajz_{Pp;yNbPc@1iRgqsc=KqDcW+y&Z1&{`XGnBMiM|Cm z;2AA;Nnz(G{m;yCL^4;`_kJQdJ>tV{k0Ns)C|`Ss7UU<*OqK$qlX8t9hE60cb#9Cg zulYcBXfeuZCoiZ#&OtRRhC;EM>U~&iJy&&DPALK|mZ|kO`{qYT$52x&_h-Ma2QdUR zq)#{}&dhNiWn0b4_g>>j(47z9=CLDwpv7P#YbC+&NGh`k23Xu8=U~v0LU4{K| z+D3W0D7H}-RFG*}!KLn$i%B%QSb(=3>E*dJ|0K%m2zdeM5~List!?$MPL1i|1Tq%W zKYaJjB`k#?J+T?6^b8@Kr#=gkdkr#VCG))O1q&!i!tqp@9u!oqzL#x1%fdfQ14lY7B_0T3(%l3E)dn$nmKe5=1zqS zLlJt&fjPQS`xjMPa_+?l=;Edt=7L_X$M;vnjAZ#Xh+8wO0P8VbHv98=?_UI?(^(MG zh|Q4lbxZP7+oIzza20%vph4>weAMq?mZ2|e6ey?9 zHL_x_dYhd!(5BbE)Ez9-M5R0v>p7GtBE>zpe~i6# zRGiVXEf^p`um*y=1rHuvg9dkZ3mV+rA-EIV-Q5BK8g~fp4uRnA^L2jj-g&d$omulA z&7$dE_0`$6_pUnUxTr47>F$>wBFfsEf7x(2vX;z_9Vx3DbVA_jn+5W5lcM_5CA>$* zR{R5CGk*Axu#k|4-j;}Kmc-urxD+CgxB(1l4H0f>&}I$bem_p;_uU+j(59-oExN5r z7BhXV=Dp>q5RotDrRr=~&3s$>Rl!uPtW+gDM=nJjT4Do?67VM9kwyl4GZy2$wd+mm ze86>ZG%|wIUi9SL2#~3{2AKb_6S$g)tM}d*X$WAAq?2T4UBDzbPp{$P3U9Rott28&hmnKf|%9qw+i-|rUuZ(eMvf%F1@pOxsdNws9n8n6`e7Zj5 zuX~^`F$H>|SmO4#z3g9iPf$)Y93Om-yZKb|*hg=wSTTMQ?VJ!;# zo=eWUW$Qh*Xo_sA;DV)O={OZeU#10Gb9_2G~4Py1D08(Hv8*5RyYL=KW-)Hf~L zbrPc$vI)0o7>IVXin+M@TXEm<<6V&p->?dMv4~7NxO0P-15+41F1w264t5p4@n9`S zbDf5fhj*SjckQ3mudj%yDUA2yMK^!n=eRnkuV}Xcg1)#}=u(WY+Ip0-#SMb}%HnBJxk@`t>$e|BPJ_%llM9VL2CPQ9*7nTg1yeE>K|6gZy+I3;uC z4Jl?j8IY=RmK1*Jr1rfQLn;M?@65+_$1J%u{_057C{kQQ%#}u6Mk)50{rvuJmT}lC zd)5%W(O4A^Zm_LIw%#N%<(!;q^(kz)+XU?#MvSU=&M0tdVlZSwl#8%%gIcC*iEriU ziHdN;+n^dJ9TNN^tW)G$Hcs~6zLVl1%9L>lmJ6KD^SmQ%{3s{DZ1c&JnCisI$PbJR zT!iTBnS46>HJ-Re?))Pg(#pQ3fV+w*2Tm;;*M^-c`frC#h%GaQ|6P~QQ7k!%PZs*IIdi%qRikliCGMb*+w}tjmS#7v%0U1* zz|FJ}x_I;F;zCzR(UOEZI6nik>%j0#l$7B7I1v0xQ)ON4^0fAu`G?Zas$(O8!B)Kd z!^*XrXdW}9-=^pU<{(|xR~^`EGvC{XulJfv`5sp!oxA$*R|cYf9q$aa^ZQFO82m{` z@n|N2oR?Hmh09iSYC?xUs|}x|ET*kU111nvPSbDKs)!Qis>i<8B0}J0`poS?9IMQ>pkP$@&s6 zx$Xk5kx3Abdl!1^p^B*xo(3C?2dT|id2uT}j4G?bt=Ob7>XCm7U2`QpozbhfP)0ig z;;{T{8P0A|$>mELYvkFs%3>06q%l>4I$V)yPFtWI%T?6N0pT$z)rb);53;MNkL9;Y zuwC7kR;OHFLb?7W1Si)PT6~hAqYet49KWtuPUqfGuKb}64MNf!`=Fxw=Xj>6yeF+# zaN1jkJyInlXFn)+wiiTsM0R?7T{fLI_iJ1+YuQ?lC*F7 z^ns)#Mh-Dk(!Jr*8g!>v#`HRmddfJqy4^qvGu-tF`BRMebFuBhDu*Br&;*Lyi1}{O z!^DYrxp9G28WMwW05qhHLr+g&}G zc==;jP(u5H3!LNSs`o4 z<6I7%8JiIN!ofbpdh7CY(w~7(JeUKnSp?hEU>zRJ=3mzeaPlKg_S^jOOl&MZz7G$5 zCV!3T!t)Ba2%F!L1q^8sup5|ihX{=&)PVS zUF%9g>g<4_nRM}6UL}kmjs4KE6_TuQ;&*l{dL+d>U5Oxin0>a%74(zSwO{#b%fck6 z`2wy#r{+uv$HvUz^Y6MyaKGyd1gJL5J_uP|@iTR4sRfL--VjtQ*k)F-|YF6u0bfBuF$gkU_n@vuS3HLSiVoicL z;cWhd%lZ|#*lO%8v!fL>L$Q0>!F(E&Y_rZ~SR6Bmd_^%PC{f~m2B!a;dr(>U6MzXuWcC0zO^HbJ$gn2WD6bHV~ z%Oiv#+ktl3obX!?d&{Mj#$4#QxIF$9PK?P#&4(D#3daWDtWUxXqLlaN0fbEnTwXJ* zB<=|>E%U%NC-$^F!5(n++#bmF$kF?qzTUp<{kIs~p62AHop^QiE|t2R57X7{sc&_S zPr&)r8*7DDrZd#unBnl5PdU%O#)%n}P8=!1p|VB?vnFB}AKCR-<{kBc+D23#Q!qjb zu1b;L(@^nOJ>R{oq1J*!6vO@5Ia7>t?VtPRH6LHE=cMDzyB>;IG8^+YpBvHG5;Op7 z!wi8?_tg~O0zdx<@t=fMn2N}@fLZq%DIfK3*)Q5`=%G>fz3VyI8qlAwvR`LS z_{jI3!;01sR^6s&6lb@%_!hu{fUW=r5P`uo7u5e6N(`r@bFH0YwaVP=h@a!EUuv;{ulaxJtxm1`f3Q z>q-OPuPBH}@PiPy=PW8CAc?#A?wU(j8EJVaZ%hok0_DVkS+4%>dZ((017@t7%Q!C! zG*CzwX?22W21;hknf0PM872(NSL@4d>Fn5AdnE3fH1ju;;{Gl3eW~X0l$SU%-{-a4 z%;hKN@N9WjlD{cSSLg;!`BaQBN=GJbSDt_;P40K?uMTBZKuineiB=?|9#k zw5xEbP7a8+jLa{Ls?yt&Os(iwco!{W?0cW=NZ2G;hW!ATcEg>7u_soVDL|%y0VC`9 zx^2b8Op3`*G3nOB66*y;k%O{jysQturZB5;eItJCN9YdkY*wrB2iRpWeMx~#IGK<5 zX{N(C)7srI(es(^b{HW)q59W|l6fB7mWCLyWA9IgiKfYq=0EDf9csldFCJbc&NR>(;5eB z2!$2K{{s6l$^U6x&aCXp^!Hc9N<#|V7MIGjN^Her4${}ZkEiQX`GV?GUl)Bgb6%%T z`HN#@iE7<#(s_HGiPL#{^iOBbSa0OCUxh?B(POVKne(7`i?e^`tz?{f*%FsZ$)XNi zGi63wheGi@-9$^AE*`(0lpoPNJjI0Y9Fmlg2V`#>w(y)*NQQ3OyvoNkXohd}%7*o5 zDUjTt>?xM6KSJ$aSVN)qTytAE97v1Gga@(LiyOiuz=)7*+iz5|Epfbk4*#6nM1)ZJ zZjOs#OMR!x@@ZS;b$CTL`t%bgn{8-2)2A5uOztS7P21Nim}3!p+S6boO@@VYy1Su- z4@67>eMKeaEhtx43T^Le(tK%!_|(V+X8O@jOMWqaTC^gc|$-U@Ug-8-|*N2$SZcsZPL zzK9dW?0=b*@io;C0VNm6;cHej9!BlITXxAg*HyVCqmK(J{zG{-E_f7(F@7eRfsH(h zJ`d_uG@Sdq`x0drncF9P*GWYDdce`}HI#5vo*xfq3PJ?%X;O^l1C?<+zWziL3?c9k zJ)F(tK?S25rwE=$>2Ad)*!3!-U+%;+o=yH#IheVbKhy>DRz!`dzZFXg2x*}SV3*6(C*V^D5dkJ!Z0O3v3I2e~_iX>ph@;!% zyYo`EASU9A!yCtA82gis4Fn<&eYXwOG_`Jd8cD6Bmf(VR_-T2^eXdI`)ebA2B;K~A zyt|F%-F467JBi%!F{J|rqFa}&_5g=-U>1Ew@*aVb&4Qe|6X(Y?ZEI>F8fW5?j5G%u zeZ;$8cVN3-CG*#VHO*duC5QK+U_)1X`&v`Ph8sNGk}aVOZrQTa3_OmQ5EZyG1B2uU zaEdGEx4iJg>;ca zK;kE&HFz_cokrqF>bxf&x^=U6Ui#?j>#`?v5n9~tcRaSOe7k;|X1IUiz3C6?kmpk_ zW2+3wz7qYTK*$b6(z(5|7gnZ zq4H_GoT=H8#OWS#o3OXz+<#;^sq@azg5Iw_2wDc+E%Iy5yLP_v-m()UoDxb{ z92l#9hy7+{mc#w_*7amv@ifhg;9y^FbAo8#$q3d%<#2O|=QO#M(>0{sZKOPUWqXZe z>9)0Ye}yO-)Z@*!8*S$jAvXIJ$-2fLq1AoE_49!3K-b{SBU`K`8`;L*&ZN}m3S7~o zqR@-~EhmjQ%yD^e=Ly5pUxf%OM|UgX(_zcb6;@`C&0-q+2*a&nvv6(&&LiV!uR8yv zDkX9EPUN*9P}7~_OISIXf>bP(;r0ytP&;&eUeAS?j$|2`(mVdHY0Lef7`rzLSs%aL zZA=`D*fLWb>T0YutL1obv1CElVDy-2X}ZMA87Nd+h4$RP;w`s?Yv2N^en}z}KbrcV z9!pIizzRS7k#RzuXiiRwe`#?|d92FcEX=H6eqG>gRZi>IH`$D2JH2OqV#|Z1283NvjiT5$pFca^jWA&#EhYLp!F}~A*M9|=>)K`9RibkU zQ0r-6M*WDx{>f0tA3QJyaJ=-9-$?&4M*Ss>+FN+q)@F9qQCxCZwyvJrlY56&Vd+EO z)Zu_ZRr*HoNkjDzRX(*{Esd9EHFxdFTp2F8zv~Yg;R*`lO+aDwkIBdIy@P!R636n5 zB0$Z&_5xIte`TrMdS{m{(A?4x55^lY83gWIBRaX<)Atp88EIeLm&s-eP4ptD$ei3k z`|@G2dY5^l?z7XA3vzMaJLF6uwc!w~=%A(V5pccn{JmnI=H3v^@r-WaV66X;fnPre z1$CcybDiJ-31N48zq)DT{c5q@FX-#x`dCat<4RLy%iDe%2ao0<@4hjcs@4-l99?d+ z&ybh117k<4*?yahAy==R&C9SGRH}KQFiqzgnAmWLdd|kp86maz?pSMHS zSx|E`u1}DIJ;UdL<}cCdPT4QF;PB>P389}qzjfnog&bCUoQi(53(Nju!?@-)5$)6R zXLb7r!tuU|A4#x>#fkZ#gO@-qC!G6tH^(3yQJI(t=itF$M-h0h@=i8Fq7X3Ee14;# z{UmaZlz^6oljRPX^{yVnhi*sC{Zr@sj4n5(znCIXHE@gp+LLRu{YDVt+f1odB!GF0-*PL9v$Px3`w-EcP` zm2@gPP75zuEkJCAGv~l>g-@2rB|(|yq(F7NahRE;P;QJe@w>rzwtgo06b5V@YKD{{ zwBYn_fbBA!J%qBxADwXo)#?-O{DBF^>+JZah#hTf#{J#~8bxt^I^83zo#Xa%c6I#H zvmi^1=Esg4-2+DjAHqYQfkgo&!E9aS8*uTIlo}&pC2hV%{>K0mW1UM5g(cgJ%bLFQa7{wDG3iV2%czGvx z8-KQU#!bS#x?hK{9Y#RM3TBtD4Bcd0yFh7|?qti@Vd>RIiwNvTC=)qCZ{sE8#|FSv zQJ!JA8kW0);qdQLbna^Tr4_^fl$)&&nuEa7zdErWJ@a_nvoGCKEJLzNX(nDG8qM6Y zv~r@cd3~HXxdH0=buyIzoK|p<0FriBcoN=SH`u=S?@QnW$6Ni>j-pB%I5p2Z24_vJ z)AD48s~rK)j97fbRX0@1s+=gLtwVsb6GO__8{>dcAcr~#`)8{A9b8d6hK?w!WNaJ> zAw@BDVVn5b7oQu~tmUa~B`fRZ*8$sOCM0))hv(UdJ}5*}!d!&sm$9zZ&6i$2;_J&B zQXTz%Zy#+pBugFwLPvAM%J;jsIu*`q0F)M(gE(%fyhs%cN<_4QMgCz%PUjP8@?R(q zZBN!P2>(1{j?kCU*`>v8Y4OQ!S6;z9FN(Bxesud{F&nz|@Xqn{7qQU6^8#BTonu&b zxs7+rLS61$W zUS2GZmqmBymi05aj6Zl8YP*}T^XNkS6n{-TK!ny$S9b%8oD>NrH$nt4M_;CX@}~+l z0PS1Lr`$~ZtGtG5!cQvCo#BAG$EIqXRs@QCO+fbZy1<&tuRmj+5hS%9`=!-?L3T%HZ`n=G{9D8~pBo+~Oc@JGrGAQHayqoV)5zxOLL~}mf0(?yp8ZDG_8hUt zOgJytkc2BCQ((aBw)t-M*L^lx+v>~o3VJkg%%N2--z3x6wGqRhA;VxqBLY{&Y`syp z`*!mHcURg+4}-A<8fyawgF#lu!#cxYiVn|}@5V{vMt-2a>6X77L~{cZS&&Fo?^0HCM?_8L6E6@k6dy!@mCksqt~18v4A%;}ZCr{2m@R#@Nx+^NP8C{`;W zIQr7+a2#Nv18Dob2oVpHG64?f6*(tBfA04SdUksbWS<4ijX7Y@W!yEB(2*^SX7gg4 zy!WNq?Vmu>MiKN9ik6-E-Q5CK9^mEF^}d58RBBa%yPI4tfo9Ji1KY^a? zh*qCv%>W^fRI3?zVbwjP!J9io7W<`6KV81dH1Oc=823kT7k)OW9Ab+-E_Q$h3yq4) z=J7;de7)XUBw%R;c+~dCfR~U(G?1nk1z`ZVu+Ersqd9?4g4>G;?~%BMxtI8KRQGRC z_6E-v;v>;oEs-laKVa0Zz)`4!aaA!IrfNlh?qjw0qiwmtp*Ntu(mM*uaPff{47uN0 zD-DSlMPG+RB+FM&l%~rBdna~QKGLO9$l@t4y^iB(&y>gaca1d@y;3+XRp3qG-Hu19 znwtY0RspV#1wf8E#nR|RC{u$ZTxk1XKwLfO8y(nX8PbBOQ%434> z>DI7`p@y>OrT9Wxa^IJ&@dC{cw{3pjhunVny|dViHCe{dbuDqvQ)td6py^?CeOj(y zFRCNzPlkj3dw_8w40kjSj54Dy0t_V_wD&6XXg>Y zQ6PpijPRqG!D*u0Hif2V;=czVh9omonTa^^Rp@rSZeF5Z z8Nd{B4%;&Qr$UZ z^BBjO3WyQJ%O3^N0g8s*(NvhA?4yOeO~y^!CE{T6JJ4Zt^uh!9R;y6a_(ut5TF;M` zCjJz~@|{`Vp{%@R%6O5f=TEf;?2JA#J3(vG!b&T@n{YgsDtRs2KQFn$aqXY_nJXA% z3J6zOvq1SQ7%UsDgut<4AjQLi*)O4M64u3e0@sCdx?-bT{=rCY7PLnJ@UY5KjJId* z8*}t3&bMngexc0?HxLYT9lP?kwV$)etGUvgoV9STjD>CqV-E3$YBay*331hf-1AK( znAY%~HpsZ6^Fw!jeBaChwV!u$3N!7UE!!P_>&5ddKF%?!?30y7pT|FeX)|KwD@2ge z3IpmQmj>oP4je~aSibJvKUFNu1Jk_ra(E?am9e?VTNPR9d%{Jo0s(J!)*62d1}h!x zF-;)Ru_uK3|G`R=J+jX8REi6ZpvzB3rC-ItI*n#4yw8nQZYK3lqL{=`n&-nY^1AmH zTvtT##t!E-83HaznyFR$Ft+t1e$uquSDoa7NcXd8N=gI-bj*1zale;aWvZt#HxEGe zjqHFWb3SgDHEcJQMtOoOmjEq79h($V1N6<{*E*M{bT_j&VkGm21+r?{|&^k&M#E3p3B2WIt>g#P+TCL(j*G^Y#<-v?87*WFGwgqE=t`WE8pJfQ@ zo1FuC4KFwK?axv38R}_nNR1gS6LB;OR+d=90D|bXzxDA7-Jt;yCsJgd&`3o6ZRFtF zQ0wb%cEqMLJk8klnRSF9hq2~~<03*iBPX{zD&_cqIIaD4Xbah7!P7^I)aTQ~ZKc&0 zE|Hd(uvP>ZhTQ_s{YX)1d4zBKm5$13p4Zg?b<4+_RL0GxRe>Mw6327X)Pw3)1&(Mp zkx&Z!aAhYFx^=~9|3xK@@OEK_4V#J~>iht!fU9#5otR@pUUZY}o#NW%BAXHW96NjO zL`X|F*x_km_Bk}$)v7dfhY%}2Se4j^w-``<0DKd0KWFTINv(gKbW|k{p#a&u_B3aJ zLW2dickz>cdJ?XppXgs#pzTc!=(Tez}kdA8pof)S_WKs=LSf|Fgd2>;pHFpsH*H z=S{qB06*Mg*GDvCIbD%7Lo<|+E}hQlX-3h;0gKGXFTFF+fl!|K2gRcj>X;(K!a)rI zyTBXj0rcg;QM|L?-PYY*e0P?sJeGn5Q9e|lQf&iehdp%C-ZaoBCeUyRGA1p#C{Nm2|VN4(-Vp-%# zWlR?0O>7-C^u8h34?*ppny!g-jsGoC6~cMkM-bz?;XXic$`ZrJ{{phKR`opz;w!5U!y@t5VYWSL0~%zOkEn4C>zb zy9Tkxd%$~a|8K;$7W;?Tbk4V2=taKrS~=kK;CGdcT8ovDN zv7SHdIxT`I{3!qJZBcJa2R`)F2lzzdx$01<>XyGH!O|OF54s5Z!R^CD0_d*P1_C+~ zK6h^j9`vehnMt>8jJB_`mZQ^@% zL4=4cYJJv+mYF#^YWgvvt&p#~+EuwtrUs`r2*h7|GtXjpxa$Ge zubdc7-g%)s3q}8Fl4xt~(s%xmCg`_TO2QVzSMxe8YK+EiuuzZR+#GyJ{iCH$mByy#fd$L>>kNd>ei z#2jnxKW)PJLyOFTOGhB?g$Lq6+(?K{5hbYYgTrpRh~~+L0H^iBJ1tp2b=2aUv|#w;#X{_I%0bd$pyV{3=eT zchC-$Vla-eEk2YM{a6WjjhZ&X!59NBuOS9VOIxX~Vj1mdoI-{f_0BmDpkc)uCykSZ z>=R)j_`T>R<8>M&&u*|yB0jMjg>H1hH>c%|HOZ}yy%UFmuEKrj(&(@uI><8Xy@p&n zW_~eqxoIZW5Z!XAHy9vB?Ly)%leu6$_z%3LZNiL08zoKq0xtV)V;ue1HLv~)z0sIb zj_Ut0?~HsmBgXQ<-X~WBF?Nwc%!3D zKNY!Oe9k;V`|04&LoefL@z6!DxtqE+ zl!T(F0a24)7lhV5vLKFZNJ?YRjUsoYo&PJ6XiWb9!kpXYCXfrXhMaxIgbONQce#RY zXKPuO3*DU#H_fst>JH1n^?O1qFh}KM$M;z?tDPVyqLP83@G&5#J^IwTCuD#?b9fx@ z!O;mm(@$;{6^2G(>1YZ0)$Ks zau7r>8u~b?KnTZ}UkBZl9$^nBB3g>h_*nBwd;8;Oel*UnQB^Oy0RLD&5k#9hns4|0 z*tW2S09&}w2YoxeLG-S$H5RkOUEXx%KYXu9t4OSWkxS6c9JJfrIDFH(t?g$$4nKkm zdsa9OQdfd5PVcDBO1FnyyX)GoSMJ0NZT5XhA0shD798^=Jrfr~gsCa2`WGaH(20*4 zPQvIio90rR-EyZpLvUBi5fE055Oe{sYMTEKR;|^ux~)Z<`VXE1?#TXr@0OLsnLk}# z^_kCaC%_^O=jD5ujy}aypUnd<{t0gNCWei#pRcxU_E)CYW@y6V;p7&bsbUor} z=JcO(-+!8==-Q0wQd792v-hr|5wi{w@+CWjrn^NPN zC^z0#fm!wUK22TcnpLEIcSeY$oDk}P9t%xhN1OtD4Xxmo+*-xTl1s%@F?moD+HrxB zL0I~frx`*fmY>Jc@ZOe+0G5(-d?Y&tO-imPuJE(MfBa2nrT=n|L&!C@6W337d`k>L zEO%tSSW&-oTRK{mb)upGfo?0PZEW$9wj&_1Iwq8#NK_*5IXT?Jd$veD$m@ zzieW7kTM1o@sK(E%F#3H(@Oeh!GDGWCUib~I4J6?OswNwUXOfJ$8rGiqid%VGK2w*awvOOxGaU^;xcXxWJdYU=N zX=DBxxd)6n3_?qEsb#%{4R05zjZVCXOdNycLr7!^C8jSF9w8NNt6hIKTcf_p#Xfz) zuL~aP#Q#kN0>^)v>X@mp5ppyEw1l#>d<%av`4;_rJZpizJcqvmF~|z$e*)cD)4l(j zGSeqP3Ytl$@2#1-)@R=(z$La4Scf=tK9ktuy~|Cib&r3;p&N_Ta)XA8pos)kRnqlD z!?MNf*_89xf@Spw@xIb<8cq{I>e;I22tsi!!xv&HokfDe-dTC!w}Jpwz&0Kl9&29B z<}<^>Aio)>JDmIgSVls4Ukrp!(Nctxg@IQFNXU~|xzBO0R^?O2c4Tx1wWUk_EJ87| znH}96TgN*Oc|&8^T$N=>1*vK(R9FAu2+0=gbGzcL2-WI}KH)s5^GU`|yMOj`NDqwr zp8g76J)In)W}zlG&vie?bQrqc=U2O?9Cr)8Q-~YmNyF*vM3s%TA||)^52#8~14+ta zHt7nD6!?QteAyCnE5EykT{a`%yc9^okb&y@81h|JC($vhAlltF@@x^226KZ23 zVTf0yTL!3aYIV!fT0L~%<#8RLXW&Nh*8V(YOJT->zfXfurMw2-0UxohAIfCQ-?hd% zq!ss=rxG5*iWuY4;vlyp&c~z9s4EI>ejp+dx10Z@X7kKSpE2-$mDfhbLBRbxw|r{C zrYK1Y59KCS-$h6Ef|_EgRydHP*8kd=y6rBTNjdPYHl~5MI&l z587V1zyV2G1my-GX_wWlfe+yi@t5O2(uu$;Ep4QM85T-H zRfBW3bX0AQo72%$q&E%0Yn8aoT>i!i`ZA-N5N#x(C3MJo zi#UXb+_>fRO;;E0iQ$3DTa>hZ+>;o!S9;@?+k82-e#Q0Wk0qLHFo;H#2{ga(?F7$DaRRyfV* zU4U2;p*p;AhA)%vVlC9sZ~TKLDW@QRt7Z;IMY$_XHdKim?9p9QZXf0K#hqOYQ>vja zRB?q}-YQ4o467ySQ%+~Vm9g^A%kMbGx#5@0cF%F@9u<~{rf=3Iluj}WAl>;KWSId# zOr%F!MHL_eqciSPfe$VkXh~Y{&!kHdP!hRW^8`3l6@Hg0 z=rcEE9@Tg8$qmipyldu35zt#`YBN%Lzen!falK7oq%BpVRXZA7UER31(B_p9>{>bcAET)K>{v(>V&2?0=mFfMfglqFr^+HBtYF6wivvjxqN+;qUwo*fHL6 zTXF?#!eNgpLKMfc;`+wG0Qr{LiLM6(jICm;(L`?QAvde^+pXh^_PufINFyHLV}0CS zgDLG6jgehF%57;W-09dj+UA>yx;XFQQ0FG_>VTQ0z8f~xh7`eGox2Ao+u*Nv@gmE} zhDgCWN!mKlwAE#?&_hjk%!qn0tw^%a-x?b4SO{}ES*1Y0Z1hYx|IHwO{@#&^0T6!y zyc{|@$OBLahqUs;HLuG7JHrRg3y0tOa$>GY#yYY*ke5hYV7$`%@^pOaD{k%2+x+;LNp`B&FLZZY-;(d?) zfx4vq?-Y$GknypFd3unHCnHgkyH&FbkpW!`8?pq+Gh({1+W<@Y8zkWq-OW8Nx2i%b z{xYf|_35`QV+&Gg&fp|JzPM&mscEyo7Zo?bmFpQVL4 zG7{1|%jv9=5;ygH-ct!BJ6+y?%BZsnRgOQkx?Y@PB zb6Zsa%BSW}8GU!0i*Ls#rO4zLYy0nwKwO5oA0k4)MkV=QyYn#8QPX%n2XE?BpiutA zo8@uxovbfnJTvJg^mx{C1J=Zbj>+%D-Irdq66sjLa~s$cRG8ze+h6ocNzgNiA-!OVaA!gYa>IUx{=V zZ+dQ^Fq&EywKr;?IRf5G(A2&}4&vdLL+s_ss-JU}$Q4mgKkv?mtjZ-W8OFOZ<-Mnb}ff72NedwD}5svlrYkDDfP_Yh#HzPU7ju&f3lAE`*LnI^~|+as=e zxIfNzZ1;bl*%jsnCaee0JukoA$~S9lE6pzc!)F?pI7nE(d zhsyXhV+Ob&j)HfNt5_%Gz2UoSkz?zRa#wGAHjTJ*jFHVRKVt}cJGfLh5BgRZzjiKI z8zbLZ-(E*ZK%vAz;1TqAefuQHjeL2 zhNEONO98KF3w5MaBSSl{YT>~SFudO#SQ-A`C0jddVCjeVwHO0uF2%HpsRu&QwdUn) zx@N>K;L;0(4$TzuVx;*48%k&$>=j}ha!CJayhMLIh?ZuHug-VD*7&E=8TFb}#wl1f+|i9(IOykiLX&g5*0BCpLTdR@Zzl zStxXv;ycCyR!FpvOK_}+MDO`=tTG%Kb4A1V47knRx`djjPV7p$FZ_xpAejv+OW5_h zUVM9J_gew<3CmGjU4R=vb_K@V4iWqRZ}nHW!@Oe^U=MWNR%xr|T%6r(yn$XfHq32u z;^UrmALD&&+xBNr&WX@9f<_ULNF0^q05AFd6H9cYSD~88x;y-$t=}}(VeQM&<=hsS z=0vNEy{5Cx!Sthr5WhO|^>4!sHOJ7FXl{e9;5Y|^G|;~>K!A7jLwHA|B?@H9I>JOq zFF&tyFo?ahkJ-;tY&b&Fp-A)ti4s$CGIEedZO)%)76#g4&vM(4owoqD4-T(Upw<5I zDIb)@K~GMiwDyr!`7efG?R8AVX}7QtLdKSRqzg|)@hnm|K=eEP$39&3t{4J z7(;7P7*uWTql~>ML!^zhjzG*=bAWUBs=cL)rnBartpK( zbSRkSfb3I3risue_(%s2@Zt<pMutyPi~ffgCZ#3wkQfezCPG#=S%OH1f(9}fK!MeF)f@sIAW{72uvt|b8E5K> zu0whgpnG!7ymBzxn(F1+!a}A^u*envfV38VcMm!(uQ4yeSsB#HWRNAAr*2 zQO=PxWTe;}oIgaZJ|-_}FCe#o&C+4{?s9TIhOTphc3FZu`zvel;Sti;nqaV9%ASx; zIoUuZR1DBj&e@Bh>WBY7of=+(2n>FIyA}=50WQpv*JO}Fb_UQ%x*%Dxmg<}w58+1M zOaMyO{`)1tAs^Wrz5%Q)bX;&pI&cV|r1jRzr|BdBUUBT}m_r_ahs7=Y@0hyqD>8z| zxMiR=)r1FA!Zo72v6Z)vWq-!D0|3%BfW!RSdFwoYieLB_SnhQyrSt0cT4E49<--y; zHd125)C!67$ORM!{k@PkK)_^X&JEwXu9}+O=ISzcw&^j!*qr`&U%=wMf)ODX17g<1*V2boyQWx%o**>rg4?DtJcl(FEaq_F5zJjM*{CtWc!fF^R> zBd4++QpA@&GZU_2RRPNRB3LJ$&=N3k9eh8sfa>oWzl-hqX|VY_B2dQvou5n6A%LrM zcL)_3@>%>|jQY^`nGI)l$e}AkRzZ(x95&RObvxvuuyqJ{#|6T1X8jYW{X_Gr7dOtK z7!oouUMJii`E zR-BWE5nK%yoVs8~njJmBp~za$&gJcG?J(Z@;_h`IiV8#=Lzh+ulHvX+kO@JKnnA5R zK;eB1gZjyFJw&eRZCysXBjXHUl`uPiR?EVdP0ankr{-NhLf2KAZ+zO%h_99h*cgPT z90HVKi~P|8>6n1(aW35fV+{(jL5ojEJ$j1mcQp`UMbF2J^xv=cc=v=_*)$cf?7p}x zAW0%iMW4z9lZsTKR%FT^h!R-T$T&a<0{1xx4d71h1yTh)>_C?PYspvTi(nUyQNwrH zfKSPlGWjBTV^z1$U4<3{sO;4bW?ZsH7`Mf7RlT?;?O_SQEGyaKk-g%}NR6<-P4yM_ z!$*BDraCitVE$;VWWaZ62JX(;q`7P>2Br$B_3-5a?r*Qb^+ytSZid>=v!V1R041|3 zLhWh-T#R7pt7~V~G`%PwzJ;FjT!9G}*Vn-e8j1q*orOZ$onMZwc3PMN+NtUtj@s@HHtA7BfdkSX%Ub!l9+ zU_p%RSZz;)r?q8tUIA*YtCoJ}2N$ac>y=S#u5ZCWV?#?Zbuu0BF7MubDN54FPDkVX z)N~DOi2KATmKif{Gx=Hm;SrVpSNlWYK74UCo*fW!nTPl{hWK=oY#pvrfQ`07B5Ezr zA$QF6Fdohx&7BfbPP~tsy#pA&eM98$Kv-i?+eQk;63%smq5?nlGLS%zCjBV8(vA=e z*~M7mHM=Krk+f;QcVL`}z{Y+5C1xG8W%BL;D^Qr9`}_;g(jz+|kzYurr3{_xy~G51 zqSa4w_MB^vPAh;{foLxa@hYTU0JPTL>Q<+B*i2X@Tqj*7ED`VrVtlQdt`--A(NO44 zAJ$(`prgMKfVJz)kOF=EGj47lrPXfUtpA{@60fFn`qOp~^4Z+kb+Cx*>SMftHcln> zKRRX!+3q%57q1lxs&PHgoI7n$H8UXKY zYi|2WiX+epv4lDU7Qg0JJa}w=ODK!MY5EqAMw8}#cKwD|{)*dl*`2uf$LtE;3D}t= zWcl^%$Q8%dCuu(eRE>IFlxrzF;Gd=5dkbv)0Oqj9NIs8_YC6>5ahCqTxs||GmsGE@ zNEyQkjQxlYipY&l1I%J;0rSJRSRs(!^D~re?`7%!p3tRm<++s}kl_7Ygn3VCU3_ND z@VyrwP7GPoTS9ZA2XRk$-!L2R4YnAT zmHhI^3t;O3rvuH27;35LNm#$t@A()z-M$$CJ@IKhSWXpDOhLsQOB(xN>jrD}*Vr0F zpRZC5MKvPQO+V~+i+yReR&e`t>l@)7_RVmoAR>fX86IZ^pYYY}hhF;XY6XDrUY`}l` zsrPpsV<{CVmIMdrxDw9_RyBLU7Zza%G6sO8`S!o8YFc2B>%Ap4BYvGRaA>I@?gVx5 z&PF;(%~UQ|o3_r_alfbFykjxf2en}eytosE|BJD=jLSM&vxcQbTDn_6q+7Z{Lb^Ky z=@jV>K|n&f1qErPJEWz%yBoaec=wIxoH;Y^%slf={qX_+d+%$nYh7!tO}^~`8I3_< zC~c}iMUYWcay$6%2n@>*dHEfVASN6qb-Q);tfuc`PiP|aYOHxo&8EE>_=Ky3m?2&V z?>F+h@_xk4d0QV6Y^n^BvTVIZO!RR0f&OrhvhqVq%o*(vJWv<`iquQV&{@B)_ZAGM zr^ZMaogggDsCGuBC-_Q}!~_`a9~Hs@zqUw2nPUk)H}+7&bEIR4J9YYge`GIMAiB)VRJX8MW2EdQW*hp$kS(fR0|McS;pNrJMdVR^9oasCUZGGwQ)u z@x0Yha#nb|`Nw2mB!1Dktdq@fmb(Y(DMLcwhn}YNCDi?(DfwHaJ}|51rcZg+0~0v4 z)bNIzR>Eb?`IPiz{(|eFBQ!!+_EEqU_@;_U@E5<(v8L7tN4n4gUQROY#mD74P7@mL z8H0SLd^MISHNT$hYSi`X6EiM2#fNUUOg5pO@fTB=>^&@ow9j~i^g@A3&JXe{8d z*M1B+a4`1yPU`B}rAEKr6On+NCFIUd1RYPs`=i5g0V|)&chx{pkA8PQGWa9o-dUkR zqyt7&KFjEtSG`d_A;f!{cd$Di9I2t9q~noBWLH;ph2$kA(fB{`ZGR#}l|GL*ar9Xk zO+zDGv8c-Z`WVP&Xl%ki;^T|gBD2UU`<(DEwi(w%9D0o(oRBB;w^MpAtD_nXBlmpG z-nQKK1>K;yE2(bi3DFM}0d3Y$gJ!&phdWgDS4sTdWX%$vzC9g^X^mT4HwBSt4SqY* zXSTU&#Nak?GTLo&7dX|5w|SS`nI0PLsb;zg4nX$t3{kU2U1d)g^`oqhVqzz?{C6}S z)M8fS%bM|8v8R=1ab`6n(Xrq&^|p#4g!X8JbO*MM54ZNHCzV2c1&a-UpbVJapKdU|MW6b9jK(k;k^pywQzMT0Z7LVM9v9!&8InbGh-k<5O3>+h0 ztNUQtx~#@g%+wiH`PKE02I|Sw((|zs>`20WtSgGa+=q70J} z%09L&G(|9{u6skl*0F|hD65|CN9$l{fFC#gKb(M^OQKCEA7X?q&KLb49t}u~?A3(F zg_fLuZ1ZTgyx#-|>lc0{p(}`w!-?LUczeeO`g|IsoxQTKwFs&`g3KDX8WsTbQu(HA zc(U5hm7&RLT0=8$dz=*mIuU6lgyP7D>(;sd&-Im;^2Bb>iPHtI5SB&b`tRgRD)K~~ zSjmrPZJI(VE=FPMF%G?>48EFi);x`h$92hSHC zM59Z&{Wz9upNSGUn$qTTA@*UsIBU7JoU7=1#)R*tJADWfmfI_YmDJ8!ZU4lj`!)Lb-a9{?y^0ys{RYBH&c)0OJJhOQDQYckpY)b1i6Z zUxf>1VSGWQEClaxOT5#vY;h&mWKVVi2R9rmTv-}?<3sNTGkR*5C6|3p;5oCPh~^jI zK?*I|DsiBq+>4d2$w~cNNT^}?XxG;b?bQ=NESywaPu#+^Z7Fg)TWaavCo-?o{Z>%+ z>2_Zn4B)mk4416cR=Ukr6Pr^Te4YPZP6wVw!X5%NP4`bNHa6Z{)ZkyOsZxa#c{&qPEdGsj0jaMg?Yf{k2m6jmjXKkev;v3}~te zqgn3>naO$KbzsnNy3MDC^x3$oZ)_M% zKAtu%jAzGfRm?Brg5fT%R0%E@et;E;Xu}{!nyvm30`2diCCT zR*HU$DGs2S3|U=1)arZb(pmk6OM~`D*wo!d91w9P6uk7QEXx!cBvg~YKJcP~4B=@d ztxVYHLnptI_CCn0xf5ydxW@Sz;6tCqh;sf10(=6%O?Ak$Oyk>pol(b@QyricJ@F{_ zeQjxBf_iS(LJgoJMy|OPbc??YdmCAW`=92H|8Z;d1HqW%{U2%JD0nBJJ<52L4&eux+4{K5|_?N-@+~)_lmtiw!=xot*Wq!#Z z#;GCkWlStaL3Gj8fuXl~E>e040F$~FprqJ(BU#?|iXbDdAzPUmS4(r%2K>x7jEbg7Ab1-znmQ#L?BYx??fu(+cOWp)6<#~Tgz2NH<> z73NQ#^gG*cg9PNS)lXL$lWeOTG`zjX=OpkpSA%V1n7;?JVN@-S07&V3QFpc(UjK=b zT>@L+!*Ep!T11rmV>MayN-C{goYHGCz9E8*7+hOEHMZtp!)%*erRpch6qV}OdkUO{{RS7qOYbW!#6^eSA`xd&RP zSbXr3`qQj2q&JC`}nv)maoX;Ub%%>qqp}AB6^jg+J@k1ynO0`_u?hxG$$u1 z(`_jztJ(D%yBPaY&@urf1Ra>QZ;33@b<1;dUMqi4* z8PKls2KC&D#I@5Q+El2vH5tG68)YZb5AOfxo}OYzao}V{%k_(U>^c^>>%D92z76oeZxloU6ySb&`G;`G@9w&U%b7~+ zP*?N4K@E&wm+s1iP)WQ25h!|yZC)XlGgFmYNG>-f-w)^t8csjc_Y}#arc?Y&v4BDspuc1`;*w+|CFxw1~y~wwHcX4`-Pl6_P1lw&%#S`1x8$P zM``KuA8P(56bAlkCy^a=E%5Cn8=)gJpx^<}j8*4Zs7LG2--_Q>32M4JPL}LI=c5B$ zhQWlf09a}|lvi@9$^e@{pa!CeYVcq#dzk{_(MlKHU|To~Ruw4p;5$c8w$n8`-I$6A zB{H6xoqxYJ4FP5TRkpFMG}(nM({=GF^`%H7J3(RJL(b_M@I)L8z``b-sLZ50 zNMz6}0SDGnYX-4Sb7YqFasMxqNHDMYoSgN*$H*nK&Gk7x@L00RY-xQ%_)kL;jaf30kUxe5RU1-;1N(z&h0c9Ny zD~;n1(C@kidd>puM4nNyN=f0!A1jb4_6?9;aM*E9-o_{z@q?9mhy|I1vgC;#&m39z zH*^n?Z2fcQ7*!07dQ)P-KBkA0GY1u%$<>^b#oTBab?$a=GU0P}1BHZlf;<}xL$nyR(dK_l1R)o0NUttVuD$@1V?7BqhW@Y;75# zTp>9XRfNwSId;w>aq-_?ITttrmef#b0bHcg@r!r%D{42@ay{3g`DT%&oh#_ocZyoUe&Y(1qdmT)1x7l*3 zCZiY{D#Tdet*pY^4lwTw+qHe`zK^OeECe(ktSKxFuFrs=rH2{}zK*!m(X;*i`k< zXQPl7doIWx{C>B3Ub;(tuPqDO`qbD$6L45~M4p7<#tj>$B$A_O+FiMSi7~k;GE>%w zee)g*CCV-#6Y60`(0p@Qg5Ngy6}|nIXVFCy&ho9ytP=At~u&yGfX;vp3#e zUwykF$^B|adh>fnw+r7r-!@j!DW7BgQY$e7ug!A0^%H4>#VH+&&L3;m5mqmESvy$F zaoeaZl(mu^n3f2P(AZ!sBYx(S5Jh(-S`)~?w`Q9)V~U51HuGAZhyqfQ)fgIWctUL{ z_6OOz7&yt3fs?$pZ+Z<2NZF&>s_4jtuEbVP2Be$E{uISI9Zz{jMj9*}3oZ_I<1d=p z+VY@p;(CDiG!BJj%jdm;EULtF@6_(^CdBJ+>xFmWG|lVloCPqeo8LqJxGtykZHaq| ztXPbq;9@z+RhEQgilJaXq>rsD-$?jBVOsiV$D{L(bG2}ZE}lkRXG@#{2h8fWTy?$x)BI=#i@J>!+fXIdSRWM0yV+K0pymhNUqeiC$e z_sWVA1^bmVCBswQpOyV5*vjwW&8l2=#g;x?Oan}FE9^B7%F%h1rsfIB)f~}Zu2=b; zNzG>mss!|UE~F*-L8L{UJCS8^r@7IgJKyWJDD>W8O1{HoUf9TiNxXHdpXlN~3?=Ot zYo9(MbSa?wOFSZ4qvS(MG1A?2AeojBid$>xQHq9<<+;p~&6N(*=zH)R#I>yPO+85^ zv7ur{qN}jvP31TlS^a@*)K30;xw`ONa6akik)EkvVpI7oKe>%kqA;WdYyYA$j@rq= z800aSAu8n|GZmdW;Dj3)F6iG?6b#Ra+TCX~}hM^Wg~7QagKlJ>jr{I^{h<)RC~c& zX2?rJJXfzG3c46Vu7eI4t;|IeQPo*$_b%%Vc%Ef~f97<8=_QU(Y zW`}hSqtVXo^00Ygk8DQIpNHU}@zKXB=n?IXc{oi&#T%_Bt<@laWMzr6CZUup z7`=Nq`rLt}|9EX^_4!k%SB!QEl`O}JLaEy=4h|>ZEt-F1W(DmoAH<+t!D0b{Fc1&pmuMX^BK9< zvv2kLS2?$)cX3kRYC(?3%TM3YfL6H?s#Pux00*Qf#Xkl8SFr~rr#mjpfqz$ZnlWtRO#~_|%~`95hq} zsW3)aj-1$=Pr#N9xU(1cZAC4nG(0?alPr7auW?@nHM6FifdHG(E!MQRXu={Y=16HJ zKC2P+x23+zTGsxWLL|~9^Q5b+=t{Fm;>}JuWkA+Fv25A=sp8buhO(Ix;a+6e2o5{; zMob7M5$*drJ}wb%oTC=1=&vtHe|dh;%oY7cbmL2ce>T{Y09Q7Ny-;=0n^adK4?qk~P9aeMt` zZ-w}^q>06-xa7wdSy{W&TfKx@m)jN`;i;HmdeL*ux6@D`bmPj8FJXpgJRGzyRj2YR ziIMBBmVQzTZn>B&P3Rt;V=tdYVJq^U*RBSQPT|pjOou&arh}#^VSb{&I8&atK2xwI zDL4YGY;Z0xW9J->&m&MKL2Jc9;{`(P7}?*e;DfLRNiL|+Q~879XH-m4UxNLcB!R~{ z#rGWAm&q~2Q_bmyDc}-kly%1ISdyu++ww@c{%?;!jo|*F5*|+POPQOKf`n5$JFm!ePxv@}plo(wBA5-38I~ib|z9 zEm)EOk=xaN4$OxVZ%|pxcg{wl9;BV^g(m|ozo26-65Q=CD$Zp!v-39#9HqkZ++47} z)k{r~b;j2jg(oXDY}(gr>bPHe0Iew!i3$=4t@PB3WeJl~Vd}QFt*@F98t!Wjwq7l5 zmWMX^xSewtI;*PlM#I#J&#k$A;Aa`P@!Xs{>Pxc_c4)}tKSTR`)THw!lJLjLiRrCf zdggRZGLyqhh>mQ^TS;>f7To*E8Ybm-b~h1`^Mp}kapAjU9vGawk4l#g z97ChM-KE`vSG#f*8;`fxzK=2cUO>8r0&mES`*$si^ckzo9uCNtzXv4v?x>}>74g|4 zmnjy0E^iPK$n7O^W^iM(}DxjfjJL%j;G?&Mu%m*et6&Ll z#tx1wAd9ydAgsmxByWB{^G5285pm<3u$HSO3#FY#tq}}@{@^R^lBM3)!f_xtGr`k7 z*bjY-9K7%at`4hOvAIuy9X1h4IS6rS3^rpkghR{6P=R!6ivPsITZR>Hb%%RJedkvK zz))`mPwRVDYG|dPEcw9wt3iz_1s@p0$`B8;N3|VwtPrHLttAp)&(%7+^%jTcpM|785&V(#;E^3|1 zhtEhOT`;2#p72Z>^A13hjjzk;qTDM^%q3oDLe0m!Z?<=k_kRP#n*r_L&Of1SVg2Ro z@aQ5ac-1(OK1PT}k^(S|d3ogF$jtk~9PmzE%0Q*Z`waY%Suj)38DuKCoFCrq&R0g< z+q*#+H_3HHZOJ zA5>v&qykhYv2(ppO=?65#Ic~e^U~>XRb|kPFyn(~aI>4k;*6Ft&v;bT1)F+~f$i`^ z(6W5Lhyv0Ix@z1vs8frA1MYqKY8*$XZaRN!4FA<-K2jr9X1@Oj|2UjSifGFk(&Ii{x)+g;rJBo`5kcoD~e}2Gx z?_a}_7EN7S0%VOupkyuf0pTN%Qe$VVo_29}CS{}M;KcnOR@adP^12Q z-DSWN-7}J+`_5ALY`wiyE9B7SGLM%8n`GG@uTGPgVe`^JZ6r~UPy9GD;rP5~2$=LW zh)Bch&z$eyNPBPoB<7oWLh0>Fg|Bju`jfX_o&-E#nZw8s?b3L)4fVws>V?39UC4j_ zKbQ{I<18MhGOU3hA+wVTTOJEx=1LsfVp}Vm^YrfC1Cw$!Sd{a=n->BK3a`NdNf?AK zLc(Cxn|#p6tP(7tP#6jioLX5d-VAtZre2RcExl9HBVTSh$DX~~P_wsym1k)VYg2-7 zqT+_>$+%k{;B^AJ0Kb?VPPW!^>HQ`<)7Wa`ScC*%;_b)3vTMKCsdC`FTuZ)OZg=4L z#-{xq#D-rtdtBgPOs<(hdq)P40C{|>6@6V>;&kEv3?UU7#qk`C)?3bbBj&U{&l|wMT9hDlg9Y}*uhU5mHbX` z*my7hU0!mhOWe_yseiw6H>!&1Hw;9)7+|motdys>b|7C-85+37PZqwrid-A-w3t>r z1yn($A#n0Kz0?t({kB zJqJo8>vL9GHH0FSfwl@S{3=_acRE(p-+XZ;Fc>B{$p1f`jISgmzm4;5ulrYJ@n_Bs zy*=Dkh40r6j)w8&L)0oPy95722ad(3=QZeEKigc9&fhUi1cIq=(>Hbcu<~T=l%t)L z*dBxVWg-21BJZpeUW=XAt;}R$<^gE#3t1e@V1S-F-I|ZW6{+YSCWZerST?dmr8a+D z7%hjuE)^Ch%5V1$C+=kU91-vJ!{N#YV(GoZh+2DHYnryw4p%w8uRjKnc~n3T<7+;xr$n6~qS zCRui;e*hw3eielp;xXLvb^t1tb^ngR1PHDst8A(lYQ5X6NmxvvaV!+h6-SzBM!kK-v2G6a3bzyd@rlv$v4 z|Ab1BdjO;5jVoZ(rb4Fe_kSA7{YxzBHFbNqy$ax1LrquS2L1QJ(AgX*hsDey5@+Rw zP0js>1u24tYF3W~k5&NHHw89yEiU4mzGCLh1J?YM%?lC}RPP5Rew*Sac9AbXop=-y zCD+o5JxrTZLMmN_BOLE-(#fH6@Y!{smH`xO)*u8;-- zbZ$Ad-b40{1W)qve+cK%Ivb7-waG(l_o6+mzwv{(DE}HRE+E+yE^$3P%091 z`NBL+-h~d4 z_BPtpd2i-b6covt@4exwp{j?Qn< zf7u=@kqC;pR)ttotWU@4C>a649?Gkq!npENbmxO4B*(SlvsrHzC$`3 zpI;p?y+K*y(wRTuz?=nGV@|lZSSP*iTO^>7ag;~<^4&vk$DwwUQfGFI{@_~OdP!jM zrQ8EpCM3)UaR-&wljs~L`PrZSBia4%#fZN=l1n^6Rolw0@yexx&il%onq_WDGP(L= zz(_+iUA9u|!Fw1P+GQOkT}cslv~b>_ z95n@`E|_+#ftg(+auQ6ZLnf|uniI1)aq_C_|LgetRGoO|#yimL?zJ=M6F&ZKak<)* zciAy)O{ouR&B#(`S*!&v3?NCJ(Z8aV9PY)gz z*)8>{5d)Gk;tWC9R#C6p$JKn_u2f8Q2Y9U^9eNj6l@pww&hIb`Ez#T2TD}v5YM;2# zHM@2dDsti$kB=ht2klL1QV^HXK*!CGhO1(h19bAht|$+<7qd0@5Ec?_`IT0AW3NI1 zAl^&u`X!z&1eV5T;=wGJ0>JUO=dz-sfS=&x;O)=~RQr?wm>q)!=vf(-2gyH+?sj3v>mREVi*GXw z6%$U)R1kO&BIvg~G7ts{)N7IB2>(e+X8(9=v&#fceRg*T&q4HUY<5VR=k?ITHKNv> zCjdak!dQPu()iOA8hjV;p93vnIe)%8n`apy9{8MD-*(hSki)$-t9k5%FZ_7NO?~}w z0`oct$^`$fbXmPY@T`iPl~at8aQ3qp){1yKS)*1_fYn%d_kR??AfH6gqkir;Mp%HV z5Gig~7+xs?GZM+aP;)_-=XY!dpxDpD9W}0DJpEZYK@xI(4dNY3moZ^Jerc-KRyw`z z@e9z}rRgn2;$OPn;mMrd_vJY19$p|y;Bi>p?4UM``3XZdcXdLdNk&}51NXw|u#C)~ zZO)To0LZiFA3b?Dq(7U)#vV*`y(+{A#^1mvwtNAM>VW@EFnq z)!Tq6)(6lT39~vR{Z3qLv+)GEx*JL)r`+-6t1mG2d8(7Mv z@&dQvo?ai!7-_yDjNE6ZblfgYS}^2YkmFthVH9pPdS)PJ%$d#oEBUzrd%!i>8}svM z6pO2gw-2B|0y<2ml2Hi*^re|ui~bEkreXrVupNcz(&w7CkvsvV0HC6vpf~0PCS9;V zuOBDDg=gobwcn?BgV9#g#>~I~smv!s3F3L)XWbLTLoQe8<}$|hC(bJYe9KMrJS4v+ zpW9ks#(!ui+okd6%=5eQE0lZAUOkcEq@ zC?PIP(3>!*7?=vyIwz!MW$LQp3}Ha%@HQi7ShLx%we@1lst*P<^6NGIE7OhNJ}%uUfabB!Btd3J0vwJJLf+ih z+8d|;ZV3oJV*W@ zN@QkQ-b;&h=30gb(}2Y zD%@S-yL;N#?dplMjS`1M;i=OkH5#}{XgL> z-bNV%<70t1N8X;pM>Ufy=u=)poJ(h3WOY&J8{ny;N=9e;fmx|z=mRP{YyMiX;%H@w z!jD^lChc1U5v`hC>H(jH59D96x*!aJ)bp=;+;q>$PaLxyi>ft`?Zn2U86&ra5 z@y!LVvj4AFmq9vtG<~AppApOziNGUN8%pMLJy25Xy9+G@3k=?$gQn~6;QhjEbB3pz z8<^Rbo_Ygm(pSwjpiB~60M8@{{-Q}K_1zWxz=6}miFk0gyMMbmmRBq~;Kj_$>{O>} z*ek*bS4kQc!K~*G3Xu{a+zo9TL~2PmjrLaVs?NO@2=Pnm{SeGw14*VYK)X+zQm5q4 zdNwZvoTFF-W(Hhz`#C`;GLDn16Gj^#?5o>&+#!%xSBy3&aB($bCHRdDT;Tj&hGQh? z;H5AUdAJjxaC^(H^$rJ!!s*^L-M8bX@VC<{7Q!yf5k_IO*J9XFjdQOh+Io9~3Nv-% z!zM~u+=Syri&^zmI?rUktLv*rSZn1G>X&Fd3ky?07{RX^dTLMwy_>B`Kn%kefWCoT zKK&@0PhZi{A~{80DA|&}P^8i31avVe7gQeSH8cjaCIwn-jfj;XGfTSP_r!!bB;14q z@FviBKeC5BOR6&PW(CiC`Y3|BD@;MLaZsE}lny@aa4f+yTpuz1=yA$z%25f=g)W0k z%TqE^SAMj$)isPR<{yd4Rjd`inYnER*l=RtkKC?-@?oa^#DGKspai43`|~ZQYQ6rVE*R3BU+@Y1S}0Q`kl9UnHqHTkx*+VEIecmkT^YN)!XD zK<}H_U6Vh{pxF#T)hUd_@D+7yBBme-4JGIffbbqCd8k6$j?`Pz?Hx2bq#v7pJ|LDP zPrF)#>Vaj9u=PTEwyG3}MiUDisR*b^ZV=&3cYl~m z^S)crVve#DD~OU_Q{IyW+JS1xsRWi_iPvd7YYXUwZDaF98X1ny5O1yNe4 z=xLFZV6gX3(%7wiyQ!pLQe`R#^rC8}sTQJ<3??likmf>}Sp8+%R>s5!e%fV{;u#UR znmy6EwZM%FGDsv|t&0?79VUpu0hglV%W77CvU(p{w&EFz z-!jQ!sqD2~ZY%mWK|UBH3qYi28yHEB>+V}8514&h76_RoI1f<{NE6WJQep6F-L#hv`{a0o66A#bx zQWazGjM&@jx#J31_6+3~YT%mTjxzH)&Da-`7x+OSyR=sObzCyIv_{R?*u&+CAnSEx z$4H<8sdD|=t%+o z){`ZqU&A;g0nFh+=pzybz-Py_#jSPkZfS!!Eef_yJZ*uNnS9YDv8JfMT5u?VORI=O zUZl5Nh<(}Y{TN5ERwXf%ZDF>NKS_9egZl14jbGg@H3K%gyPoA4Fwq5rw!0#7EZyi5AhY`PI{U1?9c_60 zBelgJeh!I?76(QHyrQlTU1Q-9uO85)Z45w{(60>kdPJHEpVITK`n(}OOQs@%I4hu5 zD+hv+&N)9tw=nC2r;|rU26LW5N?uPa9K(bO=<_7Ud;V3%y#whi+WQ11U*B)7Gt` zZ1_G80C_JImtD`p*KQ#oK45#nl(r>pHTh2h_;icJZfJk5XL8OKF7xDPn}t-omR6;R;Y zC_^{ha~_f(5Wh3}VwN78o?%Z@;SvK{{=l?D&RYvnqp~<_cp(`0%oc@}FYz zaBB1ckD%uYzlYbZvdGrS>16nNTb)FIkc=g!LR^wT)J_I-1Xhe0n0PzLsXkPef2Z)4 z=)dN-)$&6mSslQOT44g59~vHngeNcO!g-pM-Zf(B++*$|4!n^##B}3!UHG6$ z&gQG8C)Qp}xvqT@2h{s*xn`DQbn>R<*bL4PXTm`y=riO7 z8(n;a6o)ik2qDHeL6alQtpIP;CuF+o7ECRs8!fvIAv8&G1g+^q&$Qzz3|oJ{Z%YzJ z4do%E+o>#QLUmAPRqB2shUjAdFcMT0_!pExGyX472D~ZpjQs2n-olcj{SBChg5A%D zIN$4E18_WL6tUHBl>N-11xj-0g$tF5dxn4%vkmEd^kUmR-jdJpU%a|y^QHN;m> z_w@C9rThj_S+*&tQc}xi*H>5v*Lpv^gMjXU9cbXe&c|B@0CIrq-@~ZvvZxFM_E0`Y zQs(N>=hmr1^9_Lf%p$7_&hhv&qYBvd@&2^z6f8-X7(@r;U$HQmMKC&oFJ(#l@3zLq z;6sjTxN-$JtEXz@;UOlX^-*j^uMY;M5;}kfys86Utq(qlOgNNyy5&8=8ygkip}vJC z$6NzSe4GTyDV{#I9`~;Jvc!!m^argQ2;pvX00A+@8!Q` ziM?tuumy4)qk=*z`}yIjykJ`fTaveM?ZwD{K|Lcg6xCB2uowwsrU@bu=K`8%?p(&u z;TKWz25P19CE~NyAtkcuGI9TqZmr3SLx0Lj?Fb7edjIiw+Xz+Rm z+>$Khf~xR_CpN@{0rMAEP?7#TG_waf7zM=J;oLRi^ad~#>gALUsuc?{b79AH_7@*E zmUboE!%Rc9SX$HT$5bS-6;Hp1NH4mPLJ{laOD9- z;Ek{z$=nJwJ5u}@d|)Ui#A)BgW@u$YoE#!V1(8|0L;7u8<9o=}HOP3LElJ}^$t*Jxsnqb(BaP2TdqeDwWefktozDsqQ${l?B8oVeJK{}*Z7~CMsS=^$Uf3= zXbxQjXYjPw8$gZ*t;^0u^w@j_qv{WWH-?ONJ|I)v;${c#Xll%C;5Yn?Fvy)@BYX({ z*w36J3BN9|1;uA)+i31NdIw}5ThD~yy#MX=I!!@!%dV;!Uw&z6N&_K4=L5tASv*j& ze*6DAm-cp&=m61|k7KDQH-(wUtKZv1pk_QVJ@@whF5K~eZNRg0;zF9Io+EIMr=|XH zpc3ZZmiN%_&vIBIeBsL9C^z@sY8q~y((c&p!>XC;)xZK<+;qYU9b*Fa5kwmfjsG;S zrRqMjktec}sdk|K40pPptQ)U>9EK*A3fGa9*733KJ3orp1^0654`V^}VKi}LMsCE8 zIW6T&H^>2N3&dT?@$_MSk1nxp!)S?O(x%F=zz0&$nzp_icrBS_dr_jC_qP~B6;8|_3e=t2ORfeAJF`G>H1CH$? zaiB_L^gVBDSp?+-rN*IHkVGt-ez!s8?+sqzLbWht?=9|{h|D{A=UZ#Tf%8h`Tp`qN z=)a~{EO%U9{NjEY!W2a$Sq2m9*K-^}is1=yJ3FmYi(NiD6!g@9tK`*fFK(TR`as&Q z$okKpN?*|u&-Z0kiprl=5AQM}u`+U;Q&Pwp6GJ@lon= zNbi+19pkyX(J)$F-&FuC_`-ucWTJ_Lg69(_v@Kl ze`qBepMACqX>WI+R2Hc}-G0oD7#@iB@k_yDZjq;~*}8Uy_w(N1t(S&C*RO9pm`w`O zpQBG~S6H~B@?(b^!O_6Pt>W`{l!px6kz}RCFhIY0+FJuiq^T@|3Kt?S#_4PbSK4P| z?8(g-hX_YCxwmP$D<&R)hUHDid1izQ8pWFk#9TEAg9R0uZazq_DWwg&L#jJm_wh-( z8nLaYxo6P9^WZKcFA;eol^UZ^ccchMf^A&|@l7_3#33^Hl&`8Ha~FQOOi-!WQ?+8r z25}mviuZLY?LVp>SKcG%6%rsKlo@22P|AS&0hUE z(d6)Fbm))uulGNQYv=MCV(+oAFEIqLQysD7rt4gOGiE@!nbRK1S#n;hE)3b`Z}(B} zl6CTCobx?R4zXeYoObgwF1HVu78v|x!>XVA^*q}Z6WR3m0}Vpi^k$8@9f}cadMY~( zDzaU-Fatwt4`Kn!?1qc9>oUW^ACivzpSJt`p60)8_kN+%4U?Gb2lXpvMg4u3~@*5GGr>v{V8Nyg|Keq9379S|j0$`^fDBN@8F?XIi0$OSnI zo7XfOeEtRbN5gN}83!xLKYEQqxY+qJ`eyqZ&#=5#7(b1KblS+mFv$?*h@4(j3qA4; z)e4~C*q=|HV-|J%APRP_g#Ra4U4BgbUS%5;r6mX67ZgvBMRBIS!8*~G?A00i9wlRE z-*iwh?XCQgMUXJXPEe!A4k_2t%z16}_9Oibiqtm^hlv-g&YI6ADAf*Mg^B#2R2afb zQt1p*ym?26A%sHeSAQ9?qrnTIUC;GvB8)u}3M_$@N+x3hOAum+Pyepu*>fRmujJTrC1|fCeFHaX<(I0b zYm?PVPy&Z(ZGt-a?h)~up*!u;&hGfTJMRQ${AOCmb6x?iyH)F4XRtPq6+ zD75Vtxiqm?%3(}!OY=vnFIxGWnf>y-T>W#U#)s3TGTd5|>U(?If1D}c=2PM{5r*~jgeA^c7fwi_?= z2<&l+Cq=q2?zUFb5PqMN;E<+RS_nQ0(X6NJHb*Kq3i5Lh2$KH!Ca`lXm4F-VzHMgW zIUZTY%c8tXQ&KU=h)Fti#wTW*LOcxqu<=_`!`qoeh$wF@?m^Lfai&K_tykhp)GqeS z&>5yqhk2M)WTTp!o8cUzO6G<~^6hUngBAz`w#ID<1^p%^ z8+gWcUTS?C4VY<^D=QfhU6+qGfrEpIYY%>?=ace$Id+;1WPy(P?&Cb+d5oALO7rSc z#@KP#;y5GA#piC4RXxY6UB7*go|uQGDD$g>jUF_TDVWUGoz3e;8BOk6QhRxtX?zFK=i1?Ej)m}N-+`}oiTh}l@070f!vFI2mFR_CnPE@f(19FG zt-xEu-Nsy-b&US@wB<8ni^W3a&t;LH+?~iWWBYY-J8g!GMS`N z+w5PH#2=DfV~76Wb;}Q4G|($kMSvGOVxh1tHd$IOXw&{q4vqo~*9ODtlkK*u?~Y}0 zO8YN2beBuU{dpNI5Vlz7mLtzI(8k30=40O3vsRg!bd_Pt!0a8LXS&k6jZ*H{g->XD z>-NIX5hJlQBtA;5Jqt-^Hm!Mw*obagQ`K&>q=V)VXB~mYNzm^4$VB1e@(j9BJL;8h z0`)I@4)V!6-ZR2>uBc1fNaaP|gfSStjn$dWHX+lRPPXQLf)dq;c7hV`5@2An|f{;YM8;g_pSV8UfBLF3nUAia5KGhna>{`Z3;kLWJ;Uj z-o%$R?{)7=hw5DHUoD`xAHj9q$>7VZS4*pu`qY&oooQz3`NJz=G}~_9!tCiPK|e^`_I>0(5BoSwm97!#2hDt*TeuuM{hSo60S?1iZj0P`e9_u-aKYl@WRd&a zI4u+B3RlCr$jznCez->#a`R(69jyLEYM{RyJv_wGakY0lt&_`*^2ACs`zS$Qo@oX? z0an6)1NkvI_YmqQo5it_PC4yA$MF7k>b3(Y&ZqdzQ{9mcS@l*Ulr?gY@UeE{14pEr z1?|pJ8LNIo({YK=$?XaZv-jYMrs=tZ?+nddbfr*0a27#GWG`8x&bQGIt@(ie6l1jb=`*R?k)$pLNmFm zSG7q$)-XgeO?0c_psc0vh@rERO2U8bf`vX(x4MtP$>Y0|d02 z)VtX6ja4LO_4t{ktqMHNOfQ0BUiHbCl>K%*ccJ!`+EZ%$8Y;+EWojx#Ucc3uq9m5; z)s$^A>}Tv4gT&`~X|QLm1?%+sU&pG-JiF4_U)z5bv2fy#?p#p^-+$t(Nbus?AYE%m zN5^r=-D2=*2StV?jIsy=h49S_JK}CM$MwV@yAS*~Ssn<}@sb(EH8TvhmJ=_0*%T1C z97Rx`&^Co}MCMi`+aCVT4R%Gz5gA24h2uKr7P>Z6V$6^JV1Ia}HW6YF?Qv`EG_~kU z1kOTn^9`2;$K5TjYs-f>ODV4Vi+|zb<}Z)VUHLib&7+OPO6>hS7C(rOjLj3j6LKuu z%}#b4IpQ(o*6o_>L_PO*MFE0#BO5;&Bc~gaZ@d$jItJ7tuB5CCqZ4dXBENMcU}2In zNd33LLsUm*9=1Ej)oX)KuOGclW2R8eCHcyVi4avrD##9`AW1}Whsv6V z=ff7Zp}&po4}V8PD+#+$x!zH0)@#>-MlDajKAR6@=%Hd3Ph6f=i>t@FLlKQ2!rJG8 zS>4f&H#CPK274o@=z9a-4EKZ+eJ*6ZAr|q3$xphoYvi-pjlJabo;3)`XB1X+MvPjB z!Z6Xt|DhV-e0~KV#FMk7X;)CC%E*f*7nA9x;%W5D+0{dE2Y;PaPh@ezn3sH2ppX>f zd$W`f{uz=f|Fd_frjLu84O^Cu&zoTzy*VMqydx~?9=nClj>w+(7IyOj>t7^WlvTAj zVl}UpTmCp>0NN*bd8S1h`Y5g-kN$YUnG*rWS#Mi?Q(rL zrCq6fGHzO1%_^LWGW+Ai)FFR>N(-Ror?Uyf5SN&8yljs;da3tM5C*ESDmXvC6@$p^ zD9B@g3adcFON9(dE`J5(quBwGTGE4}jt$+0n{p2}*k7L}4~OQyY5`-A-0 zUSio$?`37cXc^9B=*1XWn1E)N@cX9h$uGT(D(x%V;5p`|Izn^^iuj<0m(bvZLm_@? zj*(Z=zKuD__`BGHG`2aXGMkTM-ep+fT&WoLO@}x>0O%RxCY`^YMDk=Yz~x@8$MbWn zd-rlbnY4W%h-&JQY|Gk3hoWN<6;X7or!Y& zaha&=hTBxl`+bDFhSzU{t1L+YbGQ-fuS#S4&$Syua(Ofqvi`17jMJ`#0d?pK)r`Cc zD>DvUN#-K@^7)%nu2!D}yuX(${@S;|+jS{HeY5<~#SG?ftc;ti+dK9GX^G0Tf~K)4 zL&f-0i2$9T8Sd|=S##(Xk_;pHcXeY_%2F}|vnzjAna-$Hzw($W`P3V5x(Qu+2|5|$ z0g$QBP}TwG*ri{bMZ@@HPZs9hf@$wiHq^g%1kKS&ZcgNwY81~+PLF0FmoSsMIX$f= zP88tvK`IzTOsm%fYTbe}&rr={N|aEV8@v6!J??$n+6?bzwVvskLKRPYZ3LiC>}m;4 zY7^E$;+QBeL=w*bYe(AT9s#K-UxAt6f%rVCpYv_c3lu}*} zd-KSDekXZ{%0iFv!|HrWpIKRp(c$q~D9_MJtrkPsk;p%QasvM{`Z|sTf#X~30Yq0a z7;}bk;7it2eTQ;~C&HIh!2sVk@9Gqqfcs{jQ{~5hX4z=tJ)~d?RkuXBLzK$_RXPdC zDaN8o$g}eiC*{{~Ll3ev#Rn>LuF&qc35_#==bnX0Z`iR}y=+H(S(&MX%1ug8hvyQQ z@?OnV4Oj#+vQ+si7n&Zh%Wh8c$nUYs!@xGH%4NNF3Fz9%MYox_^SbLhvbSuwix~lq zp%wDF!^YC>=e{$-LlBaD%;AyuDn@k{2;ShfSs-7f}4C z!NMsoXK-n>U2SdO&1~)9YHq0~0EULv^R0X*szSlllQit4=G{)Zo+WX3{09Dv5swi4 zSyUR5PNp?3+xjya{oiRuWW%0DkR>xbm17V`4-Jm2xHO*`^#w>eW8(gMhO+R87WyHF zA9zkYDWX(@(se4)2bpIQ*?yr3)igu29@AF%gj%dml+0M5qiO&>kq9YX*`tFCSO6(z z*r=e+jO#hz*UO%EMycP-os*M9Z8%<%?C-?9!P5n-1YNbKnJI^{zs)#0ewr@1duDg7 z1asj4s9w-&DT!698hD!OvNT_tiw#-BaJsG&m*5JqzRw4?k!ke)Djb6% zajU9~3|wp(Zwzxn3>&ClL9}B6kZT4W83g2Wt%bQLInA$ac5!+5U})+(I_|`iuULs= zH%NE2&-FDSte0VUMO-uycTdGQ2f{lKoF|@HhqP^)g@D8uo+*oqvyYBc1&y{MKlpSJ zD?Gg<*$gtW{b@-$m6o7XJ!bto{rlH`fiIaUwVvfnO@J1_oN5l$1${>Mc#jP4BD;82 z=jwh#$Vu6c^@q=zxSR0ZU`nMQMaTKD+r zI$95`qs5VF*ZW$8cU()Ml6i^dNnCVL#zU_y8}y?n5|;;5h)U0>s|&xq7vCQTnx?1> zQG`v<=v#8P%lREe{2-w0+$J-lHnI99dFZp zTG5X`fqCgr4)X3h!&QwE-EI;OoheTJ(`r?|0Uuwv^%=LiR(hoQ`DE|YdQdqrxz$=7 zLsQJ;eSo2`Q1Jjl@Z0A$Ws5UTI{j7ki4jUy+R0PgV%;C@7R9UwjAs>ESpGKi8=!e8= z>(#>E_XV=c%hP);q??3_ba7xMmbYH_mFSWq{?_y6(J~8vuN#fzCmpp7CrHnGD zC$!+%@`DEYCSYpPU!G)gU`Y*kD4(sh;(11}gC9A+n)o&Kc%{z~wzYS#c5QNAH2+9m zVKD8GLJV*-T%LZoz*T?p0VSalBS6?MOYIoa|a_QeP8xd#8v2eKXg!2)XC#`!^)R787_+Ju6j%Y_xKM!9*E=sKM)|SB}Z0 zEq_gf&GI3OPmwP)jo`oUlY;-#$Vx){)$eM}-(`n-iZLrijrNtb$V2lvu`H$qYv{ik z0RjgH_*9x7foDN&ABSe(sUzre+NsfcLNK>laEiokTISw0RxruFf&=X{25tquqpP%O zQ2KyJV2x3fA88z%uekb&NK{tkJGE*oK#N@f1G|nzpfi7JGjq-1y1-c}+6B#~4`$JQ zm5sH86jrqjgHFGhF)S*mvx~Gljn-b>FcN-!WKLQZ!0bf~BIR;RrX6H3Vn?u%@8H)r z6?Jc68=vAD-!RuzUq!v;c_xqb*PV!7Wp!z5iN}`AU9%2+RO%9=F@f;)qTOltX!SZo z%UPV_nCi5%qaPRQ$EUbCpDDyaLy;}KLOXLrFMHnRYd%}vJ|6Y8adL-VzKXopbog_g zmSv7SBVHNtB|R6wij{svO#_CXP(8k$yF?p2wTtEZS8=eDx0qRJ$LMM`OH=_TR_m2d z8K>V&U5+Y4QrQ`q*8Y*0Yfplq3$7s5L+O(txuIiyg$l7Xg2(VTGM_t}9{ZzMlXN!S zjc+Tzfo5zXZS!$^L)(F5*)jdDam9SeH=Q%1u^79T@RzvvRl#OUida>&BHzxP^9@Zri?De80+ z{^QCfY;~U$8SIacD>L@#8yGQMcXa{Ma z!uz93Gc{&M;79-Ud?E-D8llEZF*+o4vC4+=8h5)20J^VkQ3g7~I?~$|N)fb*MHh*Z zyZD0lrIH=dnP1C+Zuiqz>}(&sVx12KH4$3Oap=A`BFP;9yi9s`vB<-rGwfTA&@!H> zn>G0-hWGqcx=gDPfRmaaqg81bIcz3s=SFuHI6I#0e=sGOCcq^=Ul{8BH^NL|)6M4+ zHmSdAco5nsIHrF&o`?y&e?E4}(Q;-zW_PeWX#GkR)h^fD152bzjJXu!!v^0QVv~AQ z<6-i0Elg_!0Qbka(W=KMYXWsryoFOlX9I0=Ww>~hub{)|KbIJOZBeqEh#&CLq%lsg zIEuRO&)ZkDiQ2V7RqutOC%*_yzE^CQ?WUqv#*^~ak07XtUsxMpe#}@{>j`GvSSG-_ z`sgH{-k*aj31FHrg8(MdF#fBrqGn-GSt3fXo1paSRNxM`4VPsZ9~;-N>q2punCBm8 zZ{w+G8#5e3hiCZFY1zAvldn#7@s0UodMP7SfhvC0KKsJ2`WThF`aY6N5$q@A+M3S+ zAh#STR<++9Q()ZRa4TytW#CM!Akzv3NkVFc9Rf`8(ef=gseF6_U!wm$2ghuuj#_E2j-;=k~}wx__3I8xu9Y>I>X z%3UlqF(4#I8|RR4(vtiS$r(l%r@0Y|1xC7{ywh!VEQiKEXOZ$9o&DoeeoAE9mE>?D zAHJkPsZU~6-Cct&4PiQBTgyn)fcVitz#}8e|6B4+_${xeUeOmvB-I8ITRHc7jfX4z z<Gk&7G>h*&se*j+E!re}Zgb_lsivk)4O_(Sinw|>KHvnu5dTa*z9$3wM?9F(*lHwL3xdM}R zd{!7%Zd9~&oh}GdPB)brOOsALQKw_Rq6<-(Ousn6-x4DOh5{hwbQFQjmyHq58+au{ zS)?1`3qwCy57d6xn$rd7o6V$p$ShO2hP$yUf`V|0C*R68MGKUI_P*LG%mgEla<#f| z{5&IV0c^;Gc2ffiKpuVi3j4le)M!aP@bna}dM(J_5yAGxm~`2`+*h1_y7BaBl}{Wf zCLpzX*8G``Y(`Yyjp8@Q1vmR7C75MdviZY=6P__~pBF~`yK41;CwyU28M*4AM5q9q@!0M^+mWlC`9mwuDF}*Nz*t>-g zkM{Tsc$EQZv+!18bzMshk3$OYld0taqHArMW!hlUop|p}y<7XNXD#sL0wkk1pVWAS zv$=BhpAVK|t6IQX=Y_hW@zB>4n z9aBZkLtG*{pQ|#I(rXJJ2`omp85^FO*IDKI=@E#kIm|y@*%N>X+Z1n=M28P~=1sJK zjvi8f{mT|u3+dBwXnka4q>1`A6ee&!HgqDw#67LGiI&fwj2mh1O=4Sfgwuz1RsB)B zZStzGV&9%dqn3hf*|m1wOiW0~o9K{s)+&{V7yNj0u1NkVg@@dgsE7vDH2xR>kT&s< zA27aP_=7R=ZT=bo(lU4gOw{r(KJoQ%I-nurefIcVbxqLeLJx$zlXNAEHV1&@3V(UO zAm8QlTz3@#2I8iPa+whEbr%Q~j?yem^3F#r7h5<(ZM>^{Zm7K@X~Dwi?}8jIf_!n> z)OWhBW{$y z?slR94^L^ca{=J@o!)nmH1|2SDN2+2hcykZ-WBz_w5O}kry#68vEe~CFVK^Om1~wH z=FftVcPgbW>}3jUt8N>MJ#pYU{xru}eRhyc4K$*GXR zb^of{wMZq>%$_noyKcBfJmunZ%x`lJQNC7QNtHq+U4q!{)HRLkvgMC@i=>%yg-33E{bW}`@0UYq`%;U1(C;LbLoRNAH?nDA z88>0hWrK^UN{@``$mOG5%o9tIJ8D}4Z1Fs_$pM-wvpYe|o(BQ0FpwMQXBGWsD9L8#JWK zAU9Ej2}Z?B>GIjX%ADePqY6dO$&S4D6QzFA0>Derpg^-7svmKt} z7abF-U6LLsQW|jB-O286-M17|>s(=*p4ND>TJKQrK0p@+Ms9C3;_9wRDqIWN7Nt*w zVh+c-sd(P>=Untpm~jMsk3L_&G0zYD^2RW2@4 zs0|i;x2@PE7?SA$fR2fIwh+n~Qgt}JqgH6?$@Tne>#Xj>kU5brNzo#LhOZ5(UA;!j z>uKUpF;C4ORRqyfT(HBRBBz0_!PUXAZ%n7vwA4oYm1OQy5Wq6}lC7YcPi$T^)Xr4_ zFPpc^moagT0nHjRj1$1#{QfBHVP5}rC5nlA;LK&XdtgrMcVxC#1OXic&&PHv_`Da%fFa*8xUH&di8bHLd zmI;7>rso+VV6@4Q-rL@@U!1(EDY~$lehR_kQ#G#$$*W{Cx!a}yuJ~o|KO~5u97a05 zQa+X_S&7fDYqS&hg5w(&&PvN zuEif-mbJ&v`%O~}%57B#wOF}Ta!=5FJ}wOkr?~6U=W@Se zmn3Pz?b$zF&me3+{>WxnO%3sK17cXu<5zVI*f>C@(SO^uC&nq;n=Vpqw2Pgr=;PK^ zB%7!q!1mpAUfI~b%lhCg9ciHwOhvkpN=c+(Q(Z!56DF{cZS9Plji@XgC71Eq#dhA2 zU$;#8RVS0-38NeaH}QDyw3sLOmLi1R6j`)Nl7Yg3#Vvz)V&(XA!uV>GgGFGfGrdy8 z=O(Fsc=>9lyyLx(kL)6ifg)(#^TDC%XA67$7aDF+n<%y$UD)V^P=Ug#3?b^kH0kjP z!CaI8^KlxSsV?wN@Av$$jg%$(!ZIBt5}9WLw7u!Y;h^Ke%B5{cXUp$P4D_xn3@(~v z_%n&O2b-||wuCzgJrI?}DgMkWmw)72xGwkaN%`I&C|irkY|wJCqO%5M*;avf6iAqX zc|`vEII$h>W6dHz+&S%*@X1Yf{8MR=f{V=EJKL2N*`2M3;pAfM4*xb5cV#|B#sK`X zsbZCK-?MZ4y`lw;J62+9nLYPks}(sBYo6gk|`5KkT3Hwa}1%}=T9Nb2oE-zL+V2l-n-N)5OS2&^_&Zhk+2IVdRITz!cLXA?i4uh zUwIiD!X$PUhbxYtT)jU39lP|Qzkd8#M!<@O@eGs3vCb~X;3A+2UJb+{zk@CBL7 zPWw`gTt~+OaT$YOl9d4g{^5GH`v3%+luwviUDO_@c1AFwASDrdjqXpK&h5yKABh#- z7YPq)p?Jri3w+ryJzkV=#BH-+5SBC(7B}(Bki~B|armq*-7==_oKd3wxOTcDr}CmR zvD6*wk46WfvYzQ73C^-8Nm$dpUu$IpSZbgl{5SC^q5NDleC@kxr&=#uN9A?xcbRq?p}I(>mtK=yDJ4>DNSxK+iCllTs>vOF zj%Zwe_d|n2!|y~Ee`tRm#NARdUM^!wpwh?|T16ZTUS}U>sevzZJ<)e#C1gQo89@Kv zx~flL9ntm|s`9&1bf+eLxm$+klOy!gJkNza94|rZyRP-W50phw)5@H9ViR32)F08Tfc{OrZhwCWET7Ppo-Qe6*o<`~ zcxO1qEoKwdbLx;>&C@FzZOsYeJZU>xaY$QkCJ>W~0LWxCs$l;S`& zU(4<7H9B#%czj9DuR6)99f&8NPFI$_(e!CDIBfw zY}oD#%>wS%^BCwXoi*mR^N#J)yGa&99p#&QiW+$E|38ly7ObWqoN5Qp3=U5yb(V{l zVe{7$0pL!$iTz=%RMu^OP%f|^8lj!Tk*)QYiATZo1Uh?OiiE$kvwv!Rq5iOSB%qr? z5J?y%!axPGW?uhU?=Z3p8&jYQ6vs5yP#B-0fn#3^$KdZH>L!fqPKIda0n!(`+iqjy zebQ_OCI^S5yY>xBMj(0Zj9(qFHl!JAQYoJqeiiVf;1g8^gieFjsa|YA*Cw)SGg!jC zp4+}j8RemnHYbIR0TgJNEcD(|G4qq8UnpZ;&lP(amL>j3xVUXzpl_LdqO+mxNA}>( z7N?E>BBV7RMU5a{gRDc(8Nn)>ZknU~CgO`w@i>6ELhttLkDtBOOi!Yy^d64vDbI=S zDLXW;-x|CO@q)DE@atC<1D~^L6}19leYd*@NRfTI+p6ReM8sJ_sy)_IPHcRSpS4a{ z5E$qMB9d*xn*c&(c)HDdh4u%1f{GW2xNMt@v#0>;#?1=7Bv*b=k**+QED*aR%#~VF zHt35`mF3@+qV>@>7fkh*s(rT0Ii8o>a(cxuyvv9 zP$osuMQ3Xgv%**q4q0alaQ}1%fNLB&$7pa~VmCjaYjX5jlzwl{BtkatKl`RSh|}61 zXFbvoC9@1Uv+yR5$GI)3ww2^qa;mto5cxMU4Q4zI52}|~u&WFP<7f0H$A~;>rI>@+8L;Y!XQU%=4E=x$3Nu;Z`7GxDJvoO%Z5ucDD#7=Y`DbJ zZyIBOb*`vD?VG4i0xe3IcJET&N&}O8w(DoPD;(M?CZFGG7s7X&=fzUD@&d{A!Ad>l4e1 zebt6HWx4AX(13iT586TRd+t?iom*o87x(f69I~iQV9#*BF%}eWNi-3ELf~ZW(IOvki?CaX=k?w8)v0a|Sfua~aNp?Q`~>JE>lDXIu#J z_St5mR6GAwUrm(DokS-#yVf>!U3xwz49<&;;UhIuC<^aG8*?wBjpO}ALScr3+`}0Z z`8*&qQhIK4*hCh=M}n-0yZrhH5*P|2j6blao`i8ura2sbG(zc91=+QhH{4}{Qi=`k z1m2cr`SgR<9xSSySrfE1Io#23P{*C^W)ZXTal@Ni*tL+qeUIo3b;cCY&y2V$$sexk zcZjYVP{Q?QjX@hq`?Nz8;L)tx<7xs+tAdsi5SvPB-^i2zNTf!`=W`JHY4lQ>Bt?qyPa2(6LO=JBk@Gxzi5S|$Q=c^OnSP1_ zpT`jr&Qxzs6FZ%DWa>m{J9wr+YyD4A2Ke$EOti&gGMEvC4S5hKLM)na!;eFxAP zw6W#_lLN3OQ1+=olA7QFZ6NF+ZW!vwl|fcQ(!&#Xult9?$_IInoa8IumP76#RR@?w z@MGxzHZJ+O-@%VgN+F+SubAIfJQFrI&N;Jo?BA z@b16coeLvyQ-yfoK5_>aHF}?P4x_l3EMBtoF{mnKa@O5u5YK#x^s_)c?}T=A4~t<1 z&7`4DP{8fD);XNt?UoIfoEGlA|0=rXwWKPX8*7oEzt8By#dsR3BFo~vy}N(OOG94Q zXmmdNN;i==Lt&`BY6QeOUyR+(9| zlgK;w08<~L`&HQ46ZVP_wR_x%XUCOiiXx6^dvAAvC^DuQgaq}ue2Q*Ka-+U--;aCbYJ2A@;&3ifoBxR&mAOq5TExEHjuJ4U>4hZs5X%Z#L_Ar5KU{p!_Hz$g~bv*g$9Bde&D8zb-~dCF0)-2`d+Q45NT833Ki-4j9JGky9+w8M6vGBgbWcPY5ol`!PTg#b1~3(6FWEASkym zj2kRH>;Y!`#pVaGSa04XAjD{Lt;Iq$U~#}?9I?_X5}QBoxKx~`MgQEpONPy@ST`B^UA45tfRD5{Ev3GnMcTt|%C zncu8Bx&kerx^34Wznq+q@Kc_*A8?dSZEG96+)JwOEY_bV)+f28bkB~JtqmmdE&ItS z1*rodxf(a^Q0()&UXcj(x8M<9m;g8b13fuX{ZrPNQQZOBz#6x*?tne)MX9~tb_YA8 z?MYdw0Jbbz%~ox+J@Q8s5k`Cy{3vnE4P@XpviY(j@p2n|22o?^17faZH%kEe{*~+E z%%F&0yzih;?j`yicvdH*nH=Ok7%2hu9g;(bF&bXxg((A9N*v|WLJ}Cx1&_RiN?0I{ z>JERu2WH9Qz=J4IqT%rJiN-wM=RU(r&zD3One`hdslG85TigkvWTE#)F8B%u5XOCL z1CtRvUQidAEm3+^X<37s2(qB{f<7AurCd|;EC`a%*(^d-z3`g|zLzAYPL>~iTjy2| zc_uwF>{k~_c^~DfJJe-}WVpqaQHmTD=yE?Kab+WpR5F$(%0wFvPncUu<3!Qqet@;v zbgd7xrcoVKH(WQjo->wm2G9G{u&>*q4OEaYi-Ch;d+-( z8NOV3cvtmBqkweT(ZER>wDwLMRpW_>jZ)%tE?z@mYx;nKlNf(n9_q{)m{ z^4Cwfo6Tn7Rm$pYaPu4{Vo`KBL_@GfE*6VIvTa|_n1 zwnn{+aM?uwm6eXBB~gqtC1S*7Cr+Sl*>h;-aNUZoQSjLE-%3kj;}^6i@*%k0nv?Pj zyP^^}dt0nt9r^RMQ5^z=A+8>j&=c zaRyzMw(HE$eZ%i^?9Q7usKi<1Ek-oQK&6EJ50#RAJ|}kdo*dm1DQ^zm#KD-Hlvp8{ zj~PyI!CMSOP0E22vG!+$k3=Np9>|(Q6ZQr=K5yQiNqjhZn@#&I%Tb=>0HKR9!j>_- zNtYfd3oq1v%v(6XTTs?@Myu-~TxGQTn_Hv(l!^fgfi(>(}Ss=4uy~6l?nJ_DI}u+K0B;ht2zREr}DNnsc)5!CSduEUbdT*9YY){~&AO1uy7MVi%F zn>w=B${k(txf9?HswBYzToxaWt`$Paw+*%?37%{)rT&IE z86NeEnwln58w$5WLhALlI`T)_2-vq4aF1D)gthPvXuI~qe5nBM_p#GNBngm1BAW9Y zA-KjYtSi+05?my1-4ddCpN|zj(_t@Z!cOz?7sn;-Cu2w8J)55{Y$cMLE~RaXlvrMm zuhOl{roLh;WmH2wSWP!__eO{Fol}H2;PVPfG!ZoICg>0RS4SYCJm|h8i}}v%M2Ylp zXW-89_VuYqoW>MlyQRkIz7XjHOGJG1oGle33ijWW zVh4$L;p1>C|-Khc{hKrD2V9QmZ^{jV^2=JsLxacB#*4~Dq z$_rQ!;zKXtN*bt;L`~NHdQ{xRDJ0ojubBJ|{0o2PoIdx?VP&8Ra)8mW%hYhsgtclR zU?2M+yceSmVHeZ%a0SoMrtBhB{{$UETnHLmRh~rrEE)jZJPLbNZZ;N`V9;dPpkv!v zh=K!b5Q&O(JxN=b)goT@x!`$1Ibitd8v}P&;v%(agY9zj9C2*#&zxUeO;FvoVMNK& z{WVAuVn|K4?k?vG5EKj)zm+{AdE-6df8fQ?5q|2MxbY=yH9apGst#znOK zNyHKY2$5=@uWks2-DrN{&XjaY_p-`x z3BY|sagrkXZ;>ctcY40puiL^y z!6;e81-+JT3WXXJz~`o#>=XMU%jxJ@mZG-)9^k2>|Fr|GOHBrxU8d%bcUar5^(ZH4 z^uKJvRBgi+#*C9yr@p5hy{Q?Gs`V6GG<%kchjtkB!36Gc#~CxZkFjmHKeofUSNKD- zmKXKYom<*3jemURr8M=lp(lw-P}UC^6u$hqz5n5jzTM=YX^-*M`T@j;!!pWbQb{?uZQsvCM;E$`^Z$SWS`xv6Z1@gl{{nbHwcro^B0eTUd@4;RwGyyqm z+Jb}Y9Xgv%+bn)~Zl^=<^GU-tKun4KE~yoQxmIvNIF=WDYMo+OCS4^Rv${9`jBjrV zg$hlbx>gNrCX5{Pv0UtyhY-KBl61d({yr`C{eOQkIIo8^^OS|Q`%g}nvIgzr`ZhiY z3QKTqH%a#&&f&V^w<_@L(CpE6PiqeBC)f^mRbYt75y9*(BqK>g_G|8*OpyuZ(sozW zo{%pA@bnyurbN6gk-pO#0Mfse_>1%xvl--LZ9z?~de0JP4PVWzo}Kv@u^PC$N}W&S zO7{pK`+;cZGHpIHUi7cO%|){%UC58O1J~(r2h5)P6wzi9mG^#rQ+}r^2g!@BAvYk7 z!E`60D^sYS9@x@OSAIaiPB+Np;PUnGH(G&?xxU^#(>B)0O8C;WUgodEEP3s*Bq1g- z&!^v#;xQ6r!S`eAjmvkAvcBiQ9A+Ebv^kTV_iOiD?&{YS#I^qb1$5OnO3v&chq^UG z;>!l&<(s!l&1a#LYutRuc#M=L2#%kX&dolX|EezkCm!I(Kib>_x4TvTN(leFlb_S& zp+};N(DdnoX0VB7-aIigU+yltVeNdfuTU;SxO&p8st^)NLJk_HC)qy2eMX!V`s+7c zTh#ttLD7GJ;v{x%VdAs5I;GSF;;*to?h>r zT|*#`9&3Y0`AXsBoh_*Nr`X|gkpMWlNNqmy=n?j ze{#y2LaCw6h;rJMG93$cdAYbu>lzpUe@AcY20$m4z+jU?-{NO~ENGOE&!Lk?OgNqY+reUK?oqau90E5jwdxD+uI6tASla7fKD`vhSC2M$={ZjEtf7@azXSTvi8`JR}SA;E=x6yWBp;_eZC;dizL7(B5^yGG@tRe0Gm=iW&L_z8B2b z$ovj{>q*Mip)_*JvWK2Df$G2dtqVNdWG2t;MP7F0!cnYcgsA#LizY$om2=uXo~9;` zLDelXEdhxNOACui%E1yh`ZOnY_fDX7mgha4TowVJ8fqoK7V>6TBvN~i zA&k_X$RwkFO{8&v<~emAq&64a?+`~Znvd6Dz8gVPVfgP1T1Xi>cr7q7_LVrwx-EA1KUIEsULSgB)kU8c2fMbjNv5{KO?}lM`O>IAR>-X|rvX+Kmpl^=UXlJ9Z${^+m)bAh zfUS7hE;M;i{D8@o;BB7GRI+;ua0;tuQ;fiZ0SgTP^N{T9BQBs~z<~8u>RbKNd>n zpXC@o53l+*l_%-WrVrR1FO}~O^@u*ZRtse#N-*1Z@8PIqFRbN!(eSqg4YJ?>zFikz z-#}ok4;XH-X-nHR5~+2OR=}nrx=JbHGAKvF*=ZAomW_OU3;lEd2b-xfn#WV(`=8{t zUH*mX?Hlmjzf>tr{8{`{awIy={cHAu2MfPx-FJ5F&n| zv=AxUnyi2d65omwP@TPkfO{g|APm)(2jnQQ5P)AgG*dl+4KOh>6--AM*#uh~5l`#A z2@|ITQ)qS{m1$T2apwEo5`sJ}os#ia#qF*qV_g6tQ0$JMo-rjBHF=z-;APfZ!JhdN zYr^YW8Kh~IFN6Er-~I%9jWfWs+h3Ej<2e1jV~Yn4-l+7Lc2u`xkX8ArqT#G4Ugzuh zKmJSo#;Ze7PWmh{As`dZjmGud+m;HXp~~IxN{G8ZP(q@Gpj7utF`IJm{(2wxF9pGr zAKl7yyx$TFBhf{L^hL!VwMXw^$8S;BgS!{y%Kv`e4vkuG;Jq+KTRKL*Fzh|SBsYpE z)5BFB)~MVFAWqZ5{x9!jQ~{vjM2?3OSzK6yL!YIq&+uIc4CVCZJ47@2qLtOoj9u@r z(Zl@b3)R=sb~9jIr{fx~fIXWBb(d7{1(-K>_Sew{eVaJv;0@bg%WPM5){FS(3xiVp zdVNU5W#M#v+m@h4ZBC&t?s3-7^$gnro79xDaDBbh!c~!e&jkC4O4gh&2=1Sh1XCI6 zz|!ri^Y9@9>6AHPP&L>YLH2IX``N==!|;uIr@pa5PZ0iQG!C34ueV1l%E*hlGl<#i zY~m;s@$m>;&B$wCkpb+qk>sSIKFx#*P2`OKMRK8~0F8+GOXdK~Kh`Bc-|l#YcJ5#! z4TS>e5dAf=Oq`GY*Jz*vH}sR(+s7Au?u~#iS>CN!sV_?j)Iy6G7FI4^`MQyJpfVbp zLQ`)HSACVkEQ#gy-<4`!t;UQppg75&<)_x;rr6z6oZ@csGaRx@uBf`|qGeRL3T&qU zekE*-m~^1o5d7WR`lhx&p%SP)xwzszGPFR)iXe%Igxx%GI_%vp8Hho=J&Jn&KsP)3 zt<@3%5H@qCxtloxa^2Ca|2RX+S?W5cwHkeaIXJvSXKWTtRZLekhZJ)pd8h9{d8XMD z^BxYH$Ceyqh@>NoUN;x=sw@v*Jm5Rd7~t*$z<~sl*gj|n*MY^}`bsfq5tCcBq1i)& z%$EyoH+y>y)fZdv4hvqOvWfKF5E_ong!R~jB*7ue;X?<<^tQy~#iMU*@E*is_o%PF zZOB39caeL*7J?lw&S@c|_hIsFdMTVKb zgX)5G?%3m^0&=Ndn5)q*z9!!t$w|(`w|i3+Ph#0WF0@NsQhUV;ag@VA6O;|M9b9f zZL$L|fIqnQT%40tKYiRUZ_-`zEduz}-z}j_rWu{7edOW1U=Oy0W+CcQ5Ke&ObR8$B6FPhS=K3qe+4X?7vd z2^``9SxBd%^*VkdUV>JAua0NNc;@*4NK35@voKu|G3zSnB*7&F`2kz<8cZs`2bw@ueQZqAsx3&#z%r!7?)g=O?Z6gne=mp?! z1&UrV(V?ymg~PH8#Yx3*A%`@bdD@^y zQ+;dJk*aBoH;_w6Zs&gYpBItpraARR^z(!4(Kzd#7R83wh>m&1H-&u*c>rvNj7AX0 zs|JX6S4A??dnup{QeUt0emAOJzzP&o zm~WJdZe<>?3f+HXKb>Q5fJoI5HffX%b;7TCVzAx>BF8sq&%F&1vAUz*heVDR>YathKG05RM z0z$01aI8R!6{T^JYLgX!D{eX*2SF$Y@i}nxi3?Q})|)wM{YKga|Jcr_FjG5%R#6+0 z??D2zYWoO79PIRi>2!8Si2+RZz5BRk2DG@^bTOlu-`Y%YTLBF=LC68W>ia6#O#rPs zYFtKt2jB9Ce`1Up44?e1Ujn7b|B;efM%^Vs=dPiom-jj;adI7H2`$<4wz>tbC^AnJqSK1Gk^_3SvD8y9L5<&i$1 zarovwHg&bH4akJoUSGw?BwnLV7Y6b)-`uV!{yQa<+ zKfRqh!1GYE5{%}z1Esj_y`s`*3y7G4#l%B;NwCAsZT}5`5t&bj64Z!NX0;usj2UjEj7xg0Ji%y2HrA+QTcFT9mb7KH$-WX&hqEVn%7;;J>j5 z!tWWe>uK(%5QFlS3AM0th}`DaHU44mFjU(~gAbZ9M*PN*^}2|i!4gsTKL4RYsL2aS zv6ohsDo*@%SE|}%Ha_?NxwdFC33j`Sw^>{9{*NBt7x`}>8+I@Kuhd5sPPjyY^92cV zr5=01aI?dqt{^>=h)^W}U3j#76DEY%)h3h`vLPneM9u_!LI64GPf1*c3yqmhqTjl+ zw#~eRPXoW9NN$OzY#3jz$P~YDi^2Cy&{2!|P~~X<`Z!Gg z&8{mCoeQ@61IcwPWm(h3hVfvs9{9U!6-Gn&T=efq4kZ=Js){TV)_18P_BbPJa~m(- z1=P#4EGJ)QctezVT>dfssBhSnFO3G2*A%U^XZ7w);@yU}YB z7Aq<i(&JE6PX<2J>qa zAu(J`j>fjbpR-bw?=arG8AC!0lj8vtB2MLFswgPHwFdtS3*ZZR3xl-rx^pB7XfKG# zjq86SU{q^|PNlt#1zv2i52oS`;5>O5DGSHUp<-ezt zRw*vkhgk*!p7_?81JoWfSl_aM;j=UWTz?c9B*~i(FDb%e^KlPUX?eXYXtj|1433_d2h1 z;YDEgBK-+;Sw>U0b;uEYZ@>bBJQe{GbjY3z!sjTTYy26KiQ%r67TztNV>n?z-js0nu}AcEofg z;li?=gY;mIbs-1`D8@x}b=FV%! z0`x+tU26I&o-X@q@U9oVmqUJg`)#Q&r}N}F#6y{j5|Vg{X3XAWu;3y~##&u%NgyHa z1{j3^axUGnAn7$yl$yVOq>RB=?&ctSHsjg-v~+0EPh&jmUso$dq6OEF1zth8t!ag9 z6TD*j#w7>8`YX?=FM~47icLhM5Skt)g$gc=W)t0n+(M=noQcX{k1QXhUl-YHD6qOr zF$tzOvcUAl5)4{_2O#&eZV7a!btLe7dxfRd zB2);&{+Wn(>8q2I&p1tMPIgVh0`YUd6HrIGYvYt^b|50GrQH_x9*@EXaF&W5z1Nyn z64amCcGFTxNsc=H9u2|fJ&inlU0q_07Cs`>r=Dmcq7mDjLJwi=mhFzHw$)?ZpEda( z>bj&00Z$djG)Su1y!b~iEPDc6VR?6mkV6GllTPZQ9wY$pLbT^;p-EK7Ksee#4nNuv ze0=+d?IDf2rgR|rVB8LR$tDa&jClMa^S()%P{Lq1v3>zBrAABs^yOtZflZ~|6%ld5 z{1-ctf!}*c--RC0vSJcCR8 z9RC+_Zy8kQx^#=;?(UF4Ah-l~f`;H8+!6>D+(~eENN^{(>qLXQyGZ+3C!u=>RS5Eg7jE| z|73Q)%6YrJe}&RM@;80^-@B6e!q<`u-*N$kzR_GB`yOd;Hem`PESG}{SRDbF5w~Gu zXojwx%-pBV7E&z#xXr+7T#q@`W5~qpZaGF>Te1_mKRgNd`rsvB@yq=c8!-_6QvV8n zm|}qF!FJrS41^5Kc6oF9JCklW7G=m?U@1|;w*2Ohy*X~=5>WN)6OA7DVy3ck8{Ztl zpvvGA0#ND{;kmu2%JK#0^6G7zd~hc8<-@d3cHlkY8{h=w)~t z`I9l)g1ulfX_336T|ICZkbrvb$nel1O%)&#rC<1u;IaI-BS$!2c1O{sI`24}FhX>U zv*uo+_5VJ!g1a*?CQtp-peE3k6l-#69=mnH%4*{Esd{5}E2rrhQeL?SR*{#Gfj)al zLAtF07b%yUY(-t_oZ;zHdMAOUNxRhWa23N!0L18LxYQk=V~}MCi2*pR6vRn##WNb&2MMxtd|L& zS$RM)pXp|i99|V&B=OFLfNKfO)(8Oa7ZtOPSAN7fy$Sh!Ic$5{&+!ta3%{biy-?g1 zm^$uKrM7RhI(!u%SaqoIvEzL4W1$eI3n3!zp^D$r6>7a*9Kp{%EEt-lgS}0V+%LI} z3#~S}#dX@MtG=(zn>Uo2tI~u>OOGTufkAn>O|&gOTjA$qa?nz#7zY&8wIUX(R3gHR zZ8f2WkHZy)+g>;7jcvSHF`$PuLS*BF_C{{@-@-4vj>lscYVEGo6)5r5-`vlOsN59F z|H}$v`Acj#?jdV@tlKwS8sa1UiDDAip;}MS%4_hJu zqH8qeFsI8|{OZ7m3|h3m|Nr;MfbsgCN5XQ8qoPs4Y-ao77(e63h;@4P-*8L%;V(An`8`Y+!FCoCy-P=XY z{2$Kv?s;<>3$qJ1T0u%JeY$Ubs!HFs$&nX9nt+dxzk?y>seQl*^pt$)hCu1x^wA(> zudsa-eOj-(oj>hrDALFb1`-Z|dd2l=JTb`QT#A;Ba+aA0vw-A3phuR!zE))CRCQNo z>O!J*CsB(xe;~Qz-?{CMyzAcN>n}hF062jXwG#CCNvU`R0QLDXlBbm2PZ?NxT*kCh zF?{HD{})gnqVW@SM4p_^K=g$`!^i$g@ryn_&FC&Z(7`P*^5PLWkNw+Q`}Vv4_i86r zlyF|#x&Jh3EJS{-Tq9)RahgTW$c!7gZKgr%#`YW4tMw)hSH{gr!Ri8iYET(BZlJ(Pynzu| z5{uKHrF^^I-99pS*h^+PYhV;CyB#5nl>026 z#d=gthi@BT2!zlR@B|=*e!fGfC02PdNv1uHq&~^mO=jiexn-!p+qIi*1t5MlB1dNRJJtn$UeEw0*Mrdc zahnYJ79k?5mf;;)1l!j*)a1i-6Q$ke0XbJs_YrDS-Ws$YfOk< z_GzJtO1lBN8n|o?!;n6sc)%lww=IRBfzey3rIL>a zdTN`rxGCeqo2@-nk;9ExTfWvSqw*BlTz{0`f8MzWE1#Y~BFv3~c%B0s&?W5Kh@9tN5L)6x0OHrjV?$K| zPb*AG$Yc*-WN3Q<(*dRD?x3aI{OCyeBd%%Y?Vn^8S7a05E`E+HoU6C)>n@ z!U@Fpg2DC8VkU5wbPW+m0jL};z&I?5AOOL=uri+oaYC zcWC*9(pCvq+0#c<7G{M1;+VWhHNeY34}Ne{*F$0M|5DYyEQy3#wFrpL^h^=#Wnr2o z_`xQ-D7l2JU1DEVy4SifYFm7Pz4c<9=amHQ)_I6>#APx)9iRXUEF)lWmEYxwxbVXe zlZYdhR?l*AuOR_sggVK*PP+>yP5t5p0%<0or)@3K&$???=~!`{Gw@L&DqGPPyO|ch z00f+ze%F#4a(or&tp9KS;Jmg8OgcM!N92DW6CR9`FD^YPhbeg+-E{rQ!;5yHO3@xs zr=tdzliY7^-=Yg8``|MsqG()X$NQpV1QfK_C)379Y zXLH+8>ZB-9kb&;VycuBVLewxRnTEwZ+4Q0Miro}t{b}0+P!Avfk~PugoRbNu7nPP#vO7@d3K&;QS0V14{){C z8vyD2N9Frdj(q&w{$ilwmx|O+4|^NY+!gU_RaG3iyqIDMVw#{3y1p+N7bM4+9-mjk%$(`3BLi;4Ioz7_JrO6V`akDE1dM# z754DlHz|%TlFxLIM}ra&*6wibe<+A?E_OPqKEMu$6-K%HyD>?y&blwln{fQEvBjcE zF@45Vz;x{KXXan6n!_cX0fAlJ__xQo+iLs|2XSsr3vy&9T}QE&wKeV73ri1+ipcTlNkVu-5+wgxWdtWJ-oe)pxgsH;=Z`1TlMRqQ)M3K*#X4*^+C2mv?DIbx*G zW<4ZvSgxJ{n6H50yfSwYGTqtaqwqW3yC7A=hXIWeQ=)Kn+_a_C5hQ*5IO(k}@(3P4 zjDSyfZrAUpTQFu1Dioitn+gfdI|`-#iED|%UjogBm|Qt?Ky!ze%|r-WMf$sugOmw0 zYN#;n>f?C@Xq}!*Af}4yT_@#3H&J9pq-O%_X+fyZXKl_t9Z-gG`OGh|DNP;$yt!vJ z{X=?~NfWOMPUzE-cJzh4a`f9PpRXZ!bWLN2r32C;l|)*ZfaaIzLteXW}msq?LEy53xF$ZgB)YcfzU{P z^w3teS>N>li6%SZyBnd6wn>$<@ImLC-8E9GU;Aj!U-?S}m)we@~rp$_dnS~k&t=#I1^famtJ3Mhp^at^IjxiPyT(yH3W?REVhx**-M=unhjr6;kI~ z>d%g3{31SrkZeB>ym>MN|I+8PJ6>MxSW5+kt8#`=d{ROIVVTH*`9BTZUlIj78~y$- zc<&PsWQ{^l|M-<{%SSIJ3K)+yUkv|$_B#Q@O+o3t;>rb`8y!RqjJ|-6i;b6eum&1` z#<%q^okr=^zhz`XEnjtJH9M=HHDmQ;b4Pb*A!nZhx+%Hi_jG%1**e|bhE>dh zb{tPGFE8~cR~(mnfh|Ogy=a9JLC2`O!4C&Pnc=_cyIu3^dt)OqCa5prgc?XLht{So)T?yOvby>CqwlIHs^83Ag=bJ#t*%O zF!}i=6mFx_!n4ZSr?|zIBUfP;K>oRa>v?Z6XFYkxd-8+sGz@YLxJ>%L+N{i9dY&q^ za1)2oVYv>MwGuPks5hY|(_gX)%^<$V#X3G9C%GWw(;`uf$FMr^CS%tJzU2CN>08av0Etli(tQHoAXHE!Q zJc7ydzK$z=Hs947PMyj&P9aE*&$?F~#Bqsp*>M>}4*nmvyUrkmI2+t=w;Uf8t@V!1 zhGZTw8f;f+so<<(Vr>{uV}gGUWGYaK21i3 zVE-*{@>a;Q5$30LXuoOff=lR+(3mKrsTsZw?_I9k2s$~%h})NR-B~>DsX4tKadX;> z=6vw-Co6mm0+}~4xJ_AB`g{*EkP9Lj&$}c}TI$mp*$}mCC&Da)V}KvPh`4_DjvLAAk<>uBzAH&HAH!&;*2Uc?NTRxgPvCuh{Y~+N z**eg7&3YV4$pOl+xh0Cw!Z*%0cM05p*2bMBRjt$RT{qUzZ>s0wBDe6n1Q*$GYGlyg zj5-}a_nd}GVS~+>TOVBXw>LqAa@zm02c+k^c<#AGpj9nf=9K<&Clz9vn9lE?Hs&7( zNn4!u48ET_kSFM4icSv{#>`JLykd3tRJCVtIIG49fqAp$4au1G7 z9JUBP8$|U;W@jK{uw`~41t5vL`7%`uB7zS}zc`*S*OosB@u2|9P{^iZR{aQ*7h1sX z9^-^@vp&LnGXq6fZNwYm!1psyUA|$4F>tApLo+I>$jSsmY`D%ZUaZ09L6~qryKC+ypUM3$>pNFkBlQiWUo5$J=d7dp6C64f3WNZ%ih#M#SC8?4t}Z>i)?m#o@x z#Y7@GvI47xGBm1|45F05y&IKzsB8KaFn%^bM>U%FmA52X4qjH5w&4}Vbir(%X8y$N znmX>&__F2k1AGY$`_oZt4^dKa+IIeO<%5qp1W~hmz5F zt``39tr+DkX0r944L~cNrnCB&r=?%j&wkW11fu6ENfN&NyI}O{YwRyp2`cy@Vz#ij zcD7+bZ8qn5NVTV>QW(=a{>^3@Sw{?x}ulZ&{OHrfm@ED<;HJyZ|Yn*LmgtAdDs z=kzYmZ>@~E@4m62*WmGh)cm#|T^xxNY=Tmb3fKIsbyr*?_)qd?67SPu;I75T=8ki? z-(rX715mCxLc^FAzyv8iDQZJJ{UkTwtu-$N8JAXHhDAVFCbW&Hb$@fr76sznASRJ+ z`e*MDpcfx>zCXQazkX%`VMNtKXlN|p|1%NguWf&pUp7F~{P&T{3f^+$MxHO*{&I zh~jrPl2-FvPT2ATl?39tJ z7h5#SmD#D@w;8qhze#m|W|Ge%NnXQBWOQ4ukI!}aXYniXB5Ru|4w#L)o%$xPEkhgm zX^98yBdCrX5hQPpp6qKa%elW zMdsKv(&u$2L9njZqTjwo2UzM*xADr}13{}O)-NM;SPdnorjY17e(E{z!R8Gbf$maV zgn*gnxN+My>4wc-!<$^X^7m=(G2I!jD?}i3mZup{W#Sc(ow!Y~&Q$0S?vN$LL(#_- z9KyJdfs_~~S>e^1GBl#MHyI#ljIIcsf|B{_W_~WlDmf*?W8ODu->~-Koy|2C-~Bu= zuUQYvt8xW^^*RsBGoLzGGV>-Qj0WsGQJ%)zZa0Or5#oMJeBwIMp2`;in8tom z*Mz}c;FJW|v%TP^Hz>~_uUk(Ff!yQ|V6#>ux7)P^t;$UuC=W=@IM5PG{?RkZDoKqjHNMN~a9*y}2y*!$KF80?KA+x1F2`ZIyo0%E6^voZj0+tK|e9G zG6orHatJ#y0_hZ>1Ow#j(r*@!gPs4E)g`XDS@h=@KjaE|W3|ZCXyz_mF~113{P;dJ zm)9yRK^VM7_|z*>Q*QZcDQ$E`-2nA#4g&m#2HkI~gZm;_vp-{gMPX6S(eW;U%Vd`i zzcLwbtwqWIa(IH&ow}xtOK7tV#Zs{8uD!RTzs60AX@aeUQwDc1od-GJQ-5C$o&v1R zRQzFjcg?n7fORul)BxVuj!HrA(j~r__}&J+Jq%`&zTyU`ab%QtgF0Vig{P>pU^l$7 zS(3d-lCSS7U7s%WiZ!+>XP!qLqL|S+W&$sx)V#jz~{vl$+<=`>I7 zkvcl3c2BFsn(h5rf|VIoO|*b0qD;b~F(iI=_ND>xGv(1cE)>24(upyXF@@n4A{tH8 zG}!vj91LBW>>RR4L2EUi_$tk^l1pL|5^6v0^T)EwFAD^ODZ`Ze|lfdMs z%%;WoAFliJ))7RGFjYn|?Z558i#oW{d#l%UfU*(j-e;%9=tK)C>>cSpA$shL1iEP7 z`(099WIKZK%u5`kwu=KKxv0O0#4z&>_jLHI@=`X4VX$y&5G8xgBYe#Jre8O`!=wO^ z=+?=T{zrUxy;{+=in7@~KgKpi4`FJ7HmPzt3aF+dBxhPD0IEAczTit81 zmuy{7G-A>6MxsM#Vmh2BwV((29HzEKWaQC2&Y{>6mP{5%p_AG z3Us$`sA{^cI<2FO)%56kmZrxye`0nQ-#(I_?R=$MBmC&=2VT380mhup0D0W#*QLPJ z-s=rQvW3@omDn1F{P1;?Nfe`J3^?oYsccz@MML>Xuc1D4qzr$eU9KQy$M@DN!bmS@ z?W+U{Q7%-2UyY!YeEi7%1*1?@H0(~|oW+iLRt8RsAW9(uD_>HKxqrd_0IqJx^uvb_ zptRqw8NH;OH4+8x;wW8ya9%@4L%AGQ6MiJB-K<}D>K@Yz!Lm~QJCr26=uason7)@NDEQbWA0#?W#W|U133A6>(~z{!QNE$g z;4yFj0Fyfv0vUYRyLk2`yh&hfZE1N9%kXSd_Jr`Z6IlVcO(6f$+7{8~YNQe_;a9dX zb`lfAMxm!S(rcS$XPO^S)U!X?;HDY_NxY)1_7d2PPqp#y7Y@1@+c5C!NUmmaYx4Wo zJHGE|Nt(N=E43JRMiy1Asb5OzbBY32F0kY{5Dj~%!;k%~iRQ+v55!-f%!sdlt~ywk zbu4)qPxs1-&a2WP-QMimG}JEanv9wL7O5CLHrKMYI6lp|x{n&NNmj_2U)Q>Vm~S!M z@$UXHVfjN?ef*oJN&N3LLAaYU@nrSbQSw4Jh=26;$SlhCcD8CkmT1zvS}D1kbCaAO z2fQkHwK6zuqIzU^<65|%RwJLlP2Jm3%jELwwIu7{wZM_)Z;wApk_=MOv%sF`PfDk* z4?}p~`LJg(K`<4CS`_IR=l1f*cAfF-<0VjxWAA)6cn1F%UI05j&zc}+dhg}DZzgk*UU|8t zvUTqG@mHI7f zv5%c3`(9;UQqFIBvk13Ah4bXKL_k|@<*B16X%Xpt?t0m_iLB5;xQTI0kxx6`Wy2`@LI13sLS>ADMM^b<U_6v zSTDSE)Uj-2C6J-vp=FD>WEG(ofx-Kc(Krz-3H3oDP+560=?w|(Vzv=`B~?U^r64P6 zsat>uf+Y$*u`{8z5Eg8tZ#Tf;vI*UVwKcN&Vui%!X8-CY>|qU#E>Wz8HijDn%j5A| z%XiQ~xiVOe;QOhXuqYfJkG=rTd+(Ti6(Sf5J@E)(8ScyXM3t_kp-dI2C_3o( z`^XEErgm!(kL7G;DA2Dol2)HTDRQS~B@qRC04}cD4Apj{Fc;{94rbUp!-L;{amx9@ z+3pp;2KGQ4PF-B<9G_xC^)CzW3m@CuH|1v$neo9SUrMu3Vt0x}i>3$xW#$a)Z0@Fx zX-{O%zD?d3D#R#tJ$vJ&?PB8uP{!E-4&hjL<28uL(q?G{f9llUv6H++Ud4WPk@FI; zq!dwmav^tx02$>jK9x&Q&I|^K`(`;#xYbQ36K+I&DQ@w4o0;9C7ck^Jqblebi4|(C>Y?RO9Ep$hpUZ9XThxq043il`* zI@s6GE74l!^F_l2D*&ELXX^|zfFHP|y>(F2Ke9HXiVgD?W+~#&ri$H$2ti0EFYyRD z)H{Uj-b2T|vT%iZ^}~p6SmvH8-=-`%a=nT+zth0kMWVK3G3OVeMt*9g*kMowJ6jzQ z?<#z!O32y9Y-vu#<~W=4GD(D<41@C*El9$<;gmEGZDy>q9MqUz#+}oK@8v~%na>h= zMF!&gThB(-m5z>kww->q_i_&3`Q+u?SX$JxQ$4+_#wnE{UvJ}G&2NiqF$13A15A^r zEwCzhHILGx`nk!O|NNzh;HOgBL4#uBcGI6(izHb8HskuG-{I}RxR;VtNiD2YFm)1U zN8TDY{PfPvn#`f$ukQ>#Tlci4ExxW{rxHM>;z6n-~IJOV$0ulbYF|<<`(ytwyBdc&v z0KINqZ?GFwMl+RL-&>nO4A_osxD?ymKy%jXxwI2ZEXOYiC>PB7-7KK%e!6vJD?W5H z6K+G=F=!G1qb;+N1aAyKLEqLuxmy!4)EqIyqth685I27Zp0BK~u7+jbk^1c;NYwzd ze%sY=UE%W?4|J-tjya^54c5>G+3ka?*Jqk2>qMQsPjGU&lVvi@{#*;x7%Y*>`&ec) zXpx0v?DR@l(z%lrA_?qHBBu^)oVscf*q9la<&KX0nR{dxPTL@NYkM;J9s1|#B+C{@ zm+-NvIqI-$Q4B9^wrJ`dNnagCK>I{Jz9sI*txq<@cKjG8JQGd&kP@kxy zT<@o?7+8=zo%ZL~M?CUkq?~hxS%Fh$C>L*T@LQ%BX8r%Iv88^iE4XZ1^JTu0b7x0- zk4D>g5?^}?jkC6TT3}1DueBa&hbZEd1v|R{FU`u0CQ-*G) z|6SXWZ7NoRCqfwEpTVe~JnPlbwud)ErRCOSK8nlDnu6EgColV(PJ$&BMmnf<`Q zavVU3=E0&fHR5D1U|r-3q0CSe3!fgWc#d#pdq1v-h_2QNr@klgtF;|O-e`Ub2*Rm) z!=+((es$%uSD4ph1yS_AU1rk4tk(@2f?sttPxA zQ-}p0XRYkpw(kv}fuN)NFVJNRX6U3qI*n%uPkf>HvGmhH4JIoW4NHq=CUuW_phmy~h~l zbulc@e%%-!V6xqPJ)VFA@h0HebCyt9HGQqI_KMtwjZ}==uQrk3*{`0oR_Bt+C{@VM zX1}v)bb?Kt_DNByKB^lTuMD-tutbEhZgQp}IN3woo654Ywc%$fQ7??L+Nnd3Xm^(p zl>ecp8xpDR@A_!y(P|Gk9=7G7H}<;BwqM0(kh~Zd{}ZR9&dzHs%#i&4sxU_2XO0b} zup!7#VS^Dr%AJK8ED#RFhLm~GUa9a z)kVHxm;ic*DfFxLJU4Q<3#3R0=AM(3-xR>4Ra9Jc(5e4fFZ>Nv8+FCa`#KekN3AYzyMc58JLNRCe`h8@Th5Z1Uiso1vK?%=pJAJM3$#C-l&6B7bK4uNH z6+We$`-!@w%@F>If{*Z90`CB$t0EzP&#iQD^yTg%t_5tA0{BlCY)mx!F)fuB^^Pe!hb+f2+_U3EEWWeYz?)%Bu zl`XU9cP5=ohlZ^en#GTN!1!nI=AG?#SoL?`o^B_K2XB_qW7iGyLG$FUUZ4@|_lp56 zb?IsuxtqKB{`Qn5NFxCJ&dwh z40Vi^aJ#wF6;PYM3kBF!$fp(6pnso(MJv0*+T(&qj8^=s$|4@pEE~$Oi?~ zGF-->gJ-<|?a5f>lvbmfkw<nZm^3^u@>CfBp7hE#G{Cmj$;i2*>O%wM zxZZH&rd$v^f!%j&Tz4~CgzqA4`vSDFg%R6-XT2gzDQ`_NAaYOhAGwvpo85?J856#d zkrke6(ttxn%2H4D67~PPGD~!H0liqmwlqUxj+#cPXwwduss?2OT!& z`?Z+B|M=NXR)gmX$<1JkIv?k`3&o|H`dg(%bzjH5PdLS$PTt?a5hdJ z3JsgcCy=4DwRZf0&WP4MF4pX5d*d_pM~jASfodzBLGEL$o>%c3;*QUg=K^ z=7_wsrM}n{Y8WE?Lwoe*ld(x3<sU!RJ`7<_qmN+J~j`Tuj)(~J839s`Ni za~T6JP2~rg=h!Kf0Nw+fH91@HjGK+owZLUSBuT%o&^=e``n>coqHo z-}Y4+P1^3|23G-=T8!E!$r%NWGQSVM`RQeMZ>M*@`{u}D5cr~vNSS50unsCFtonzI z)g{Nj(t;SIms(>w5_)M-?cBz?9$e;ErM^+hrKS*4HaWYJ5Mo=ee`ho;oP*;@!5~8T z@kEa?i}V1C=Qc+b`H#EP+Rv>Y9@s4A(Zz^mm>9Tm4O{J-8(1KljXPe7p^1TU$`+lI zBijwRVJnv)QXJvd$fYwZeTrf{TS*~Co7NA)EqWtJ=0WKdosT8lw+fSJLk}H zt13lM1hI8ZT66usQaE`7zJ1n&CROrDpTrvt@5QnVh2{Z8AzGqDKUjkj!!)4zA>fC+ z4Cf`dk9)z8e0&&w?B^pn!r&`(TZ%J$zh!W_z? z<$NoAaagepyOVJB=p5l8OJ`K;rwC1eAzk(5j6>qqdSZkY0U)H$ubkSz4e2_xH+`wK zetjo_m|p~+EyE2wKR>^{amc1PdxgB?ny4$74D`W`uPa)Zor6hFwkwuijYwxMHoCr{ zE^%IQNsmb}Y3ztnAXhy6AjHq*JlAR|Ti;#xoit;n-KDI19d@m5!TW*K*42jZ&knyd z)OAQ|RPkA*=wsZP?Ex+Okq0GSzKd|p%B*2#dH8H>`AQ9P<`Z?sgLvic38D6R=vqsK zD^|P^VxVhdX&w-By&u|#e~2l_snLokKgAP*Z&S zUwwA~l=^18%&Q&C;KN4pLqKI(1x(3o)F_M1eplE-8(C{rx25{tPN0otn;{decNM>F zwGC=o4p5`(i@aEDBuAf=Z+D<8fl8@`g$;o{=N2u!Ttt4h?wRnvQLZV6yxU6o`V#iL zgR70ko*jtK;!p#f(b8AlS1L9aRn0oHiKJfeaZO2|*b zc(eC2t&o=|b&kVmK*s}=uYWskrsL63rYx{s@(oLWF*v<*9&C9>$T>C*H;Wh$65_c9 zX_c-TN*8-hsgm&L$RndJP((SF)K4cbuIO9n-c)CnQ?IyvDytFzu&p+f5_zB6S6$Y# z-0ftnjBK?q9P}ej9oKnE^)C*VspX@1C;dFlB;r-a2}5lL=_4as^&f9hyPxPNc6dYA zyzu+h#|ypuP$MR1V~)v4s((0V(1J?yV2>OJxon@%ZGu7R-yD~b>Q+X0USPzol?7+a zA=31;yrdX+cu&*Q9wm69?akrj*nv{ELyv( zY>*TaEzU<>@~(X}n_*PpOv<1<4eMb>sjH54F{LXqqV?UnWCRm-=rcqf9R#88K)F7{ z(+?G}b~=+@FI56nqbJhm)WF@`qi*triDHM{8`6y{S0qXhcgpA7c>AgKoGuW95lj5o z%4RX0Cp9(7c*@9$7D*S`DzX;s1^#W>|Fhq|SORw=Vt(f$JJ;4y4EhHl-IgcvqumPz zvNf$+H|rtlmJAK0!Y^i=wWoSP+_e+DtyDZSiln^}`mznfS*;#z&=%L;TF-%n?>mJ~{`Nv?@r<^u1$L zlUdcuGx{uF?z#8YE;|m*kvb!e-u7lopnG0qf%*20fqiW0Ix9O}|AwCjUns44FOJYZDl-z|!%tj?^5!IYOGQm#UrU;%9t_^}RdEFGXo!OHnl5e{!;%M0RHQATA08KKnv^!efQt1Pax!hQHWXH1^~{jqKUpRsH%eSs6FwmGC75DbpVk@ zvez3d2$~roLQR7!tsTiUHYyEmp#^&AQ)m+*AJ^nI{9|mOu|_YS=#A+=>o!!k1b~_R zBOxT(mf$_uP-jF^`|wp3qIE~=A63DpEtNo*t~y+214$2OxxRbkDb6@)0{6uTGL%Tt z{AX`pE|r#N5ZLMuKxd>V=xeOhek~_(J6f_D|RB%yxhPd$wsL0{j4YjRNO&3zfE9b6_AyN69~sB^x;FxVDhmoOCQ= z%4&T03dPq!7zdd&!pp{* z&Lw0c7j*gqpQampllFevOeVrfK~0suX-OUa|;}Sm%tlPzhSSk=1cdcwa(tl zl;OaUZ96M&qm7oP_i!yu0eqXk-Gocv2Qi>@!wg_RKd%3^RpPpZdL&Z3y}u~OgMZk8 zttf9*n%N}A4f&KxC4CA5OF@FpD8syrV2r90i2nfo&+Ae9>-F3o{pa-%mVaz0;yiol z{XEMMeW9t49lO+kJWZ#lf}KsoESF`E)lWzIU(giBq~D7TJH(fRMX`^K!MKKr?vgO3 z7XZjOvtM178j&J!JHBtZD1Xkx?@~(AasZH8uuxLGl-%|;&_Bs~9>)k{Mbex@)7!l2 z6>Hjv8V$<0A$zGL3BF282!;8&3XCkJE=m7qH2B}oOBm;H;#Mn)?xPOzW3fBaXT|)2G z)g#PTjC7i14AUy-9(9EeIW^Eo-^?);-^-KA4w3K6DH1Ll9h%f8WTZ0mWL0<Xf#zCrOfosA8b$*umilW^?a6N? z1Hl2n1ugF!L-r7kz!a&|b_p7k0gzzUsxo%Y$A++9Y*4@iBSg}Wp}p`8E1HsY4kpQK z&&mpopKvc+tV^~C_06`_7Vf`yWNMl}J z+tC#s(xo$}!RV(gQ)QK28s7L?zA(KnU)byz9pcOeg}XZ-d9EF|lUd>^TjB&cAWRbnz&Ca2-2w%{ z`Ja{8CvhhP2RTrtO9*w``r8e&8t1nx3JW85{#(bn@^rRypA>{}1DhY6zb;O9QrfAA zFw`ENjW_k|Zu0KO6eV}18SF7j&@myPPM9|@*g4q@Gd{3usTTBAG>z@~5ZU4}(E_?Z zss@x#ha&7Y1095Exx6i5slu>3nujl{^5Qn1v}xwo#OWq>H~9|U{3N!m=|Ra1u%@c3 znERmE@Smp^^Y>F*`0rC2v{(PU2@G7+dQ@+{-Z7=#^6$x1oBsY0Ryi=qt5g zNe&se)Vbap|LNmwozyzTPKgp8#?rwFGath>3D3A@%3|PQx{*+d_%C6KeyTl$;yVC2ZrB9JM2YLYe@UjHBg}u9R=vKN=1Gy!=*4{H5@;@D zXlMF?xtSn(VT_BbLU?WdpI3ko*w$~$PUp8>bc`Xrk>Y`<@YJ?8{PZzAv&N^Q;98A3 z&?}BIi9dV6DiptfzM{0231k$3Y{%A)h?+jhB;MqC%K_jyTSF1Q9gFqW?;6Eh#H=2- zqhCVzYU5r;yd36bD3N%fx8)Dwba+=`qyP06?@ij+k*pA%yKk+yKkqM=89G6_w3@6o z!|dO8=pH;?nE3YoKrum--X~lqZcN`JmjPje&pNqtMhm*80=P!fA#VB>AUu6wlb08X$MyG*8(`Y5J_$lw|m2Y4T5rYdSrp_nO;Qpp2Y4R z@Am*Cy9+ zF~Kqe0gRQ><8yxe;=&A`3pD!jcp7EOK_>XpsWeC~)Ppa>pEr?CCRE_25S3bvSpT7n zuhyI%3GK7?BFo{#Uc7J#y3nHEMV3EewO`-oUnZ9-FOaT{Tp-i0%oSj^;%S-qK)dJD znX*%ToDm{SS8qZGG81_-kJuLVe)ua2A!!>4?mB@$5+5Q0Pyg_zI0vKy4^f}PL*8#% zl+EvT+kW+IKj#pxMnMuPBbix|KT4-dvtI?ZUt99P&F;nkf7#uTWE37UZE`joCdZ9J z54Bn|tt{nC;7mi_=s;IEmW@r6T-u#-;e~IB`wKpWV-m#DTInK-0)e1fu2P@%CFHPn zUrrL%GsMvUPDkr;zYtQg5s<1qt>%>pi>m0Zbn#Y9Z{HAq7e&<44ZQmX_X`G5A$PLh zo@DP3_pKo_Z+oHIAd?OghNIg|RJ%o1+M7J!n2u>x0TSZ*%ZwOga+bZ?Fy3}#_kv45 zw^uWHRTeFk#+l9?*L`)?RVf43}f;-#Z>V3cNT8ey)a0{xs4Ypr_fz*GuZ(_h-d7xu z;KjV(OI{r>ypKv7v`7HC$;CEdRce|m*ZHrF7t>dBU#QVd)6w&hYx*zee50fIeg{L> zB^g~6WBe!NT=D_DMly`!?PKY(YTHry(Xmo^FtHc7?mZlJ(Bsk=}D^4+MkW zw~cE)=j&>+K9hlX1ApDxb$Tq=UdM2F_CDtC^>v-IXkwm$=uo4UC zGQ|Ca0qFiwQBWz>lU3pEmX^_PD>Goq%Imu4*=zYdc_;8)UYD%I`=p_~D4^agiW5$2 zs{xa_6OtV1x&)yzBez)U7H{%WwV%&8>R3nMi=r-yS{aGQ6kh3TvG>`x7sYqAxOOXH ze#iGom|fg4|5Q1}n7sZ+Da7ssq;|90XsMg#=8CG2-nqp+#A}3cqU6Gr7ki+~R9DC~ zXbgx!9guak5m;>Nswy>aI6D=iuRV@vG`hEE|n2Pc(A!(H_$ z`{6JG-$%Py<7Z7+?TI5bX2eugDIozVEPeM<6F` zj7q*FqiJ93OhaX8s0!?sP-s9U2sCc4H3c3KZLhm}#B+;5R{KyYm!k5XQekCPf;T5g zwa+erm(D*){WRNAPaL)J)zC*RNk}un_g6EaePz#~`#$SsTe_QZIGC53mw_IkOwWS% zBxliuDXMxs3jo;Bk1-OahpMYfM6Xav*k9N%emc~?deaMC0mG;UT+fp7*LEb64+p9+4E5p=NLQ9{o9;3dL2{q5+??V91`BF<1QflZ%XQvKl6 zVT62vAHHn7)~IeC@6-gS(0H6zeNEpOE*~SL|0aaqx03JURd8>IUoNHJOD5dskdwYb zDzWfJXxjE4^KUox>JCT!LBVBe3=0;pqxO>S5r*|FKcuV+pyGy)X%$x=WZg= zcOMuDy>3%GuKM}~nZ0XPXoA|+{@+VZk!oM_FN_QQ2gW(g^zYfZ@O;lM_s%>M@ zQ?3%@`X@~BBF{RCbj<9#O5|MIe_{jO=L-SF(r>WzeM^fvE6o5isI(>^rsj^K`2z{y znjD#e>jfLI1Zd240A-Dauf&6nEz(XfbwPx|6c=LR&{#U>L$68SchH+M_35j z3?odWqdhJ;Ca8kjx_b|HEz6)|714_NFsKU5&y$jiMu=$A+_krJ%tO*-|LjRh<1~I+ z=hU{3NbeT9mYWWW2LxtdVU}D?rT}*GsaU;ZR_eo^R};FK$1d~}bc_w}Q4&@>-0P3e zejQd(e){6)W!ALx!NE8HF5KOPkG)<#^~c@AeY2^tgFYaTpe!^00=Mmf34Xr=N8cG! z%r{3v5J0x!*7SmNKBW+J`k`1YOTNHs5hkSv^u~PWq0}vM4D2qbH4CE_EcS^ps)$!n zmS1D%W{aJ0_@P7?PxnosZoN?)6z|;(bfF+9K+he_pzbqPs-`mrmCuCRIjQA>UT4Z3 zF_VsZ!h(-{blR|Jdw16B7s9*55k#c!F7uksijr=?I_OWLM!~oLcNcJM{4RicUAE$Iz(nV9xyxhe4gm96za+Ed=xV7 zA}Vm){53o487hGXnt~Ch{Ke;U6tpidQw7%3(1|iyr$sA;4fdW7oz?R3i#bA%HIB+b z58#S%mmCUs2lpchmP6`0LEOF$2-->5b%5MOwBu29R$qv+2T(%U5eWEw??__AaKI$` z4s2mQF)#=gW1D|ds9@aL+$tC(UnurSba|KUXp4)$NADgTTsTC8q&CF45~BA*bjlvo zM~lZzz_^E}-3pz{n552sXF_msO2hOz!rSQPUlhf}$C>)*I#ri;>&sgsd;`W;@zk z;rXsng>3dUiR3NJ;{)MLvE3HPWEF`8VR=S#j(pzQ|Tdz`A_3W&(M-}4Uidv~ge=cXc$P)=r@x*XXk>V%KHqTBQ(PA84CE`jKkP$DDd-JZ3PABt1L zP*aPdv;`)ch_k9k*l2ih`Ji_Y6LfMh$Z^ZS(Sevcxqq|=#ZgyZFhH&a5Fj&GHiihi z=+aKZdYPgIQ10>3pxwb0cAqnYli%*bv@;vHOX}jeEuOJ*JUldl54*!}80=f`pNR|c zMtwO@1dyE7YbuJXP&sdJNIc3Ua0~)fLm{E(C~ENe81KKe;_bj=&XG?$-^qzplqq`| z*d)E}h|}ing{+>eUU)eXFKk$pwLJTWD-jZ_*(7)%F8vRO>hV`*_wN|?U; zt?SkNtH9bwPqrhq8kKG5Zj53zW2cBFkh=7@}Obt6EdMy6B{}Q{C4CT&C ztt~HdQAY$jnOwSlZpTUbd%~HQS(PLZ_r;d_{4Sk+wDn2;wDKM0jy{#3G6KgbQp)M- z2Tr~wr|33Dp8lI+fpoWKQ> z3HTIUGXC0ISgBoVObyBqq<i z(gw;H7i{Uw_L1F@C!?By)(#oDI5jTKA%-}L5c)U$^cuNZj@*b;5AErzzZ~A6dM8g1 ziJ?rg$)bF<$XE0D;(e)pQ))}N9Erl#efw!j`VhtXtL&HYBkY!9Gu$3H>y<#&>vpB-CYVQ9N3L~xD< zhZdg;19VXNsO2Wn`DViy*_O2oFD$TCu6$X(aME0Hv9je}65?{|2dVZSbzoljczf`| zHXj6=o6Z)}ryNyFZy}rE8CjD}U-=KNSMgfW5c8QvU0xU1URhWRL7vQi#$-8@EcGHM zlwc50(*T>QkU@jL*zk>fv+qV@eq1zJM7qa~MIEOA!T9v`j+u`OJm8tguQ-b=q96JF z3=0;C+N>8v%f~s2NDg6&u<`kMw@ciE*J$fCEgwWbfIJ2p*?3A#h%#QMqmt8Tv};w$ z?v0u9G1|q4uqJ;-$v)GtwfZA}#KwJ*BFDQ6bih2;Rc>J;YQlU{jyMdawrx!vUD_Y7 zfghe#2C`L+5GDjsR1-u(fSb*sh5&G+IGZnK$+lKx?zYEqHs{PtpSqjV=Bu6L5h0&G z(M6SskJQQVAGM0{7TEGJh}YP)IufP;OIc}PNArAQI!Hj${`LM>W`D{>MmH)!`R<@3 zl`-76|DvF`?ski{IwozycY+r{{uL6C97+ghej4im$XvTkHNe?D zz&W3@qTfEeXl=@T+rBdgw%OZ&u_&M9H&SQktNf##gQjLYgJSYWI{fKYzY2k?UNm^q zJT`ZXCd;z(BOt5_gI)*L1+16;W ztyzs+7@`O}Zox5&6tPrEv#%v7yHRB{jLAY@a3|Ezb+((o>3>&Fc*G|D#_L3jTvTEj z*kwq0r+&1YlWHMVCXu*bwj`n@!-pa+^eS5Xkc2Yb%k6yBL#~(+iTR?s`+I6gBx->b zH3~ywh}ge{$n_Xd0-D$#_G$-eokVzEjmq!A3%W_GuW&teNQv1aSPA(!Zf(Y=^oXQs;0t#^q!<#Xdj2$N#>qq6U~H>73%OBY$1M z1Ve|1$osM4K#Kc%jfTRpqD<<*+!$N)8yxr541YF2;q8(Oi6l|0pu zZ>WN`-~D>imQkS2J0R>Q8f_>{S7hD9hZ+sP{*1<?&G{SgGZpQj3n4E-95 zh%H~9V9n7}`D6fFZ(?6Jx9&FGc7^)RKFYAb@6XD1*fYk%PgLqhzjIQ}f7YU^kNv(u zqe?Y@ToXnR5j$T$*u}cFTQHgDK%izk1Tq?_+;6vP(SwVkN!xBpK2=sp;1d>((tUU} zNzbw$RPDK06=pc}lgTkoy-hWqJMQ(pOb0m21A})VTL16hZaQpdKa?OCDvo1Cv_fE@*^g1k?1>F?c|aOhMDkI-Q3)2 zt*pk=y>$}@Mk_(e+Qyeb9(PGsD~79FsTRA0^T&&~e{t(27n*>-dtIG4Lo9faJ@$ef zOg0cu!(Fykehwck>>M54S2b71_MnL@^yB!>*S$8FvJ($z!e|DU=F zk)-e0sm&x%ga~mSMnCG*o&G0rCC7n;t`9DhWnnE0FFhmP;I&lrB2z!j8sMynul2B` zg-mdC0QW>t7Q|Nqa%lW~DS{&wf1G${Gi@mzKnf&7Ilx4L%{TEvHU)6 z@UCb4n8gtb;BxXbj6b13-sYKW1JET4ND0@H=V3ypsaA_GVl~AwBtKS;qPtY+Mj zip!bp&n%=xq*G>!u=|m^;gHU8+EsMTj*fU{;=xO41QCBY>i;u2wMGH0>?b|Eu49Al zVk{R_sXM;bHV~TWZWO1Rldlp@@(0x671;&01^>>5?67lyMvsdvImoVvs3Hq_gv5!x zqHc6_fa3}cX!$kTu*e@TGCx`=#3zb3M;kCAKU)4%42V?&=V(?ifR`Rm$;OL=z3w~N z6Wdn0psgJY)8qg{z@R_Mauv{`nqkd` z;Z+?MWdZmb#6{fCE#$tS9tkqPmo}M^6nuzo;kF`NI>IrWdGIWHnI`QAqD-wF`3#yv zXwGptFh`jDQ3F-)-#wz$`!GJ52mzrA}O*wuEby$98g4uniNb>ijLT=Rfd*5`jlDF1Dqe(ll< z?jI5P*U6mbYFC*W{QLQG0>Exf*Ww>p;^DU_uWEV@f*bt~f=-PAF*<+-~# zkv4j+6YV)Vs~#AP%jAJtYwc@OlD)`*X9wiP^J2vX8bDNL8lorM)<31Kv#?*2P3K=Y z?LGdm7!NRi>)UoTcXHH-qkRP$dXYEWewu5`G1Sm$zN*c$K+m zCv0(kkN7Xc+#}JHzE8(8XEv&*HTN`is&cji4fI+ayQ+y$%wWc4I?oWg2>?%wRu`31 z@~yo!H8;QQn%U8%uua!2_tAcyVE_t*&9;1Ltx~*gqt&u)R3|V}deM%l?M*45-wgZS zo=-=E0|-;OPgcPM6EL0V#P2b%;lIQf8no%Oc#|Ja3HM5p(f65H)DHmt7myeO2u30u z94E!=mu|llk)GJ%ygxA|(0!WonG+L0h`*69Ad!>NWX>Ey3LO>`W2JD(>Dwl>W!*3; z$=olH8Vzi!)TbOVn%fYS$dKJfZ`9jMfG&lwo@q8z<}DuNfcyb?Rq0Q-#wfmZjqtp> z?f8xEnQvjJWAx-^DFaoK9s+>wSSMw|u&4JUu(XW<_oCplLmicY_B8r%UqFdj03*Uz zqY_cF2s2?uy9kTd0pOX&1Z9Vr$EyYqaO)qVPy46xyM+s{YX6%shkDC+TCp!F-p1Ek z*CzPb}c)5GQ`;hS?X1Hn|{^sYj8LvV{f4IWbbN_@6lrVk6{LJEj{JJc^?*N z?OHiTAW?w(b4jMqn|Ytx;MMg5K3iMMA*;io&2@Xo@w(>;T$5P&74p1O9*ypTJ1%@e zfRhGu%=wOJI=$%>X!?cyV^t~Jx5bl9KI|i!!o-cBrk<6(thYk{snm!yP|eF)5aV>1 z*9mGAO!~9Sr$UV$`~y2H9>vK%ft+JoM)3I33eZ{H56t)d6PX-V2rj?LXq$JwiG|-` zwpd;rOO_VG@xv0Ge<22#3n;?$hGwTzCI+qKy4zo^iL}vtsYzm~KFxxMl8bs1SH1+jt#bRqKscxN7EW?_ z*|lVzVkjff4D3~dpsNt$Ec`8{XYHLx%>MQlyj2?IUKhZ)MYiSE6eHU$60I5Fl~kt{ z-_$uOO_cw8HfTk@5X`@JI$He0wKo%=KN!n!j4_vmeX})@Iv)OG;;_34l1^r_4c8Pp z{zxQbmf(oZ>9DcTNd9l0oER+v%#9n-|05tkGJ}H;v@|0knl<)q>V@qdeuzpZ@9uTd z(PjG%y~Z3dATM|RO3Yq+2cI$@R<46_v_xWQ*E-L^5e=lOK+JiSYnZ#go;wZSksQf) zJycL-QBdO_L`8=yB;DoJAOa7uT=V+i%w~>5mF2yz8WjUeHkYdNiQO?8M^q4+>A{}- zHeAzB2-p0TdpL8Zp8_!k>j*lbWshrXd0!V#l~^`V**_Goz1cIHM6hNA<&mQIB)AC?w^|?d@CH zaaY+U%1&KhO~Kc($YsI@s(;KfL0sxxE{-)SI3p<M1!xq~YqVF%0iNd6l2^_jL+Ehcek@M@2(bMNpS`-f#hJf`}J@PR48?`5nV3jwy z2#CNfa7@vWm#QHU$PhnKv-$_na?1UW0z!F#RXKX8p9AYcSl_+US$WrbQ~qj8$qNC9 z$3+UZKcOiNx4o|=Oo8|usuMOit)GUfA}c|#2$K)5^U6jxsIxHmfm4?NLDBSbq)VI* zi+iLnGx$i>N$e!GL&2y#BaA9tXaRS6@gYm#t}lHxY?`tBT+;Bh#J6qsPQ4Lo_=9wZ5aAm$?Lg8HV2GZ7cbv-es6$U z1|@>)He~VN1;F!bi3LdiCnzPDa{bZ6*X#8C_2{UNpR0e6V`kqxs~_(dNAaJOn$od5 z{K8f}8{mSGQlA2b3G%FgmTe=Od(BD`R)}dBS<|vcaiugl)f!XfV`uz$zyJ~5hL}o+ zRC(DVbJTCEEIvSwc%-`$SSrDSP+Jw@v_^9JHA%m8-+>O*;0XtP=`|Rf7;KSu>tutB z3)d-RXwf0I3cg=o`D%SNT0Ex84{#3Y&2PvL-n?Iff1__gL6nO@fE=>)hfWC?AEB$s zS&E{K10}xy9ma*@R1)oL?|GZCnwTlENMI+L6#fAE06kI1s!Y*^MM|vbfic zj2zaGg*@)cUi4=NWFezC108c&szd|yz)K~r~lU9Qz%9@u35* zt1GDAu^t6oQx7_p@stYF82t^ygyR#i&MzPU3kIHR0->%0Urz!V{N4Lx*?u>tqaLR( zrCu-y*A?$0UqHqv&ty8)tQ0~8kPu0BWp_{F(d({v)5k57mo#A9!sq-&UfHyP2sc4e zjs+q{HKBathmLa&kW<^{-efF1aW+>m=h1Z(5z+4`-^U+bR(LgRyRwjr_H@nET%qs} z4_bcz?D(3RFXgJEqwZ|cB3(;myP3KHC)~?0;Vx~A#1~lUk{+HdG3Qg+L(RXw8X_l` zNFc+=UTTy+ZXLZ+SBMSnP)&B8qmA%?Y7{xXftCoH8g}3)El|Vl$C{cyl@0!g>^A$Q z@a$eNeBx0UzPv@Wuh=-#>JChKgGI)woo5_H2ih2Dymp8^p zoYFaFVsC~94 zZ&RSYa4A&sAA;a-xcj*LZ>0vsv}tL5MB;kX z(I=@M+6MW)&iV!AKw3ecgTy*4SRNf%+Nz(e?NLs+r5wf{s_jOwy}oT#2=5WT*vY?Q z1@KS$Gv6%arvCQqVf9}q&g$XP^h2Weq2Dln`2R{&d428_3Hb43TroZ>s%F}H0G%mtE9!;kD?{o7u)oc;7#p&!wwO=Vyw-QKbO_Fpt|{xD{P#QQt7L-eG3c!sWPCh8@x z5}CwF66q)HKwR1`(aY7_KqGrF@FK?RLwu{(l&W?G!s4!WC$1Ls4)wd1`D#ItV2K^2 zf%6B{Ha5sHQW~?G+Q*2wC0EK69av^X@C;4j`n;{E#}S?c8gqbTDaSh#Sy3Tv5{~8q zb;h)LBnzdd*)$+M)qIN4JS--fJqr!`ft~N2Iq91)`FQJD`^ssF#2?j>T*Uwi(O3|5 zo0cy^fxdY`v)BF`#;23P%*M+s{m=MJz$yMYglI0>=*9Etd8la#G8~hw6?+D+#OMHG z0$B!d+8yCYW~w(cOlCf?63z{&QN^Z}-!Qla){vBrdw#JO-QXRS3TWNt{4I_ELSS)( zi(PxJ<~8vfScR}udtiKV5?jp?UO&zA8THw3*NOF?#P^Hl0_GmKWv7|^>Ucy%Suk5J z=G>9pGl1lI^c8()`*)||V}BJo>|{n=SnW2zt&^feiL*pL zTcchjthd$kYhb=vTK|nJ5lkR~%lw|Cl!3k-6%LsHQxEJa90qe(s2~Ah&P=bt2z;Q1 zrtW8nH8iA_rnj~=bL0V#28l>#Ii$c*6qhSVStEvkqwx4OG}2G-+ali?PpCSMO?`|0 z<5^UtP1P9rG!C?;Cbc{iEt+F;`$<#z)GMsr1T-%}{h2YzG%Z73=w4q~n(Bk9M!-F` zE$oh!PE&P9ADezi5*^(kG9BY+0iUz~K%*G@vBrw3z{0UY@_j+M{QJFE83T^q4va*B zFN(zu7ShlacfMQOLAeCEK`PpglUz;4(BJ19Dd#zUV?}_Q7O@sPcFKc;C>-#VTV8u;M;Rm=mFG3PeN_Zy)?g( zph!%z!~Bgt%RV2{wEAfpt@MvGGyQB7`XR~t!qFk;GzFxn<91a1PMsM1VjgG;p)-%#7)u4Rndd?xsvB8t4)6J!`7X|cH=e7lpd-=$ zn7MIeZ3WRErCFq)^Xs7ah&GxB?u~_>m#A6Rr#7Y3&#)FLY){yXaUBzK0K8!}q4&tZ zrAD!6&<;;t*U$Y%^nI|dn246>F=cp(_c#}Q4`(a$4N)}y@3u8ptzQa4#4)M$|T z4+a#M^nV3ot+RHYhesHgj}`J9nRE(?M-gpa6ioM{eaIp0E{yI=v>6j17#?m(JG!)x z&r~~;0r{vo(}&a(G>#me_oBNy^WyP0ArPRn=-CyuN$R_HR& zC}K8#(dS#YyX3o`rWiX{_M$HmZLYDli%fl2v?!E-FURZ?^dMeI^!ln7=sPIx)1|G!THE1A)fp8J$9M227>?DgfN)ub+@K*L!6Rov2l&to;Fv5 zwLE(ETlf0Lu=#KJ2mtHhW9bB#1ybYcPDBAcuap?UE_G}5fPf5aeWX2K>N9*1w_gAX z;KDBY_Oe)E$8Dbu=e((>2m|$RA!5g$nD1ET@_@H0hQcuqXn3;iW#Uy z+1}4^{*fit^vpI1{dq7BehVj4HU*|HiEMkxAquA`v4iNZDsm{$9U>61rcCn;^P#6h zxU1oN-#I6~fbV4o$Zs7-;bX8^B8yeI6+|3(yob1yS|Nx45xs)3M}44TU2J(8^b43B z${R!g)_vz`(L?lW=@&%-l*oF6oP?;KI4>MTB2`-XMCVz^v_?eFzlT*TezpxBC2TZ4 zC%(LM|FK-#S@t8$O)9$m?u%7Mb!)P?`BYb!W7~!)=MQ~Al@vV$U1oI8cO5Y0fJb=4 zxtQD)69Lap#&YHz3pmi|qWi9j#IlIXys@hBVyUMXlg*D}pewOrXwXWL&@^6=8+{)m z6S;W#qIsv*20KY7aEG8rlmrvMxtV`V+-l`ENO+>N?02YJiI!X-W6Fw${ZMC@J*=#p z)>u6@luU6Ck8ZZt`&|ZHG**ON1pPKyGR_b_000kkH%l8-Oz>SwRyN>J=`vIf{_GC{ z51rx3{ESF}8ae4+!vHqUTkH83Z0qWs{Nc~=W@@!&CDggEM=%v3!!1{SwOs7&CxiTe z@jv`Pz36<*>p-2>xSaRH!Q416Q>lt{6w{9BnIg6VsISPGAD2X2%#}8KM#UDPR7Q|^ zBAJEWO)&59@~{Tbyr2^sX%(4*0sq^Jr^4~Kaz7Q059i+^!g>KCM|iSQymQv*BniBE zy=;5b;MZxrwnNv9L)<*SHQHvneNNJyE-$iFUy16N2cS;-tK(>S^!EaaaLd@x*BB!< zqAp#0#BaB2&vv5`aPcz3;rVrS`n`0a8!}GK(_|iESAxGi^Ob-FLyjajH&l@oHSxNB zMiH}==IX^hY|xni>pBz)mZYJ$N!)nth{K4MW~q)Z!p=W&c@kw9$)RcgY7w zG>4Q3(*WZuK*HAExGmv%oY4aS^1PE zNd)OrG^o2l;7i}|1c0Il1Ff#a$+Z{b}ms3k)HOy6+ZQnzp9S)D4UzIHvFabfi1*TxSAzv4xhhmx;1pPx$zJ zp?V(58A3}AS&IjPY`{>wH_*df5Zwa`_*YHX9Ipehjai$zT}O$ya?uy@n@@Y?0GrK+ z@%u{HAc^l)(P&R4MdP?AVz8f!lx}ad67vKVH_c{t7m+1&6!6=rLlyB8GDA<8;U7i3 z*xkZcDBfx)w~$eBtKzRUp&rFRad4CX&F{GPi!bh&3(N@u<3vw}%8%v(>cagY0yZhj z-XEf$+vl=Xd;4;A92n*sz<sGhBjBfP%!B}}I0>fjJS2Kf+2S6#x0dVo ze4DJ_0rNmyr;+r<$kr|(gyLT!j2rd#p6@$0i9^v%qFO5`oImh_*B&2oWXSwoOB>D$ESj7%mwiSR6a}h zLg;jdTHK0n_1Q~F%>jw&X*p2^>0vf^C%{#h-M3g;8JSJ6!4JHm22ejRBVcZ3$~O7- zf^_m(22DE(h|4}Ah#>V9V;6^x#<@!p^||+7$<>|`(1EP2_i38YDgvVOGxV2Rz$O+3 zr6(c{9n{LHv39GxZR#9_CSto)1g8UTEW$bVr8t_SaoU?vi8OrvbCt^bWK^CP{ei44 zspPc%y*KhAz{5|J=V(h(UlyH#rUTGO8EXr#(7J<7t`_{=U{r(T$n?uYgH!g_*t_@X#kf(n0=hAv-9T6)w3D`R}E0^v3$yT&j8i!!ZWOlGlR$V zp1^dt$yhr<(hsV_u6EfbvL9TZV6f%|+CY2aYE|*7mAAK`A|#%;yQxdIfhpO16IJ3H zIr+_gqb=^nF{X1)>D-IO7K`aR}GFyy#DYNz>D!oGRTXP%W_L7*)} zCfk?Tdw@PvLaJ;9FxxXgjT(9o$rp`SeIP(rT7Y~>nSSPWBkIxl_PpEOKzs7K6P3j% zF#iCxkRF}#lZ`0bM2q}e>a=2SvR|w1>d>05B}h6Wo!+ z^Lc55RX!0lN>f`a3rGmVB)ikd=d#o@767(X>`yHq*c|MhN6 zGAQ1w5}?TYkgR*l7vuc`AqJr{ZuwuEbX)*W%+^ez>GaQ`bK z$QnNtr8pxSzF%|=9;r>8{PS;b3(Hw~N*TUs&ISa!ED6g%mgs<8m3fA%E~WAK-H{MI z46%w=u;~ni!(tRRaptdjow?qY?<`u{)8`mh78s{;>x_~IB*O+*{WsCS$4gWC^nte7 zn_SNWFodJLhz6t`5!vPJ)iND4{R~z$gmO^5$WIye{a^;N?}1s6@9je5 zjidz8J?0uDR1-)P$pUNef;57d2@A{dP0iWg-mSj@<^a@`(T%0uxs6(0o)sOLRU>vo z8^wo%H5slv>azhL)e3}`S2<6pcJ2w)=HalOt(ey<=w0UR+!u{!TA*ij=Z-_u?N;?^?0 z-9%atjXHZ^jW%3uEYW&2rE(tFZbI0fw6>^rEBDb95jsD(l;<7{yF-1~`phlL`_#mL zD@|{7_M~y*W;RN0-PP=y98>A!tjeaZS4YYo_YF99$Es5&AWz^bcl5zb7(rZVqUR@q zb{hjsFR*0P8DtO#|prX3%hXTe_P6N+v^L5$f~t!q4MH{w2Y8NYCh?$z=*#PK|fiVrY0%xKXim$n}<%q*BBi|GK#PD0B`d3(BQ7<+5unE4|r-u zOv-fPjqT$H47bQR?>q+kmN_1VD62oz*;3~}>e9oPP@3c8z<`)$*#EoNMVMvCf;KMT|N+%%e;|wm%lFdHRZfSMNcBw2HYB^2QD!hLdnQImgpT z!RLIFkGjR&4kT^|?rjF4(od^8tA3W?lG5qtm{6=X(7zTsbbEuvYtbJ@T~XLEhHqTv ztn~-cdf=c7>Q0X*if)$bkop2(uyHnrwxC;VW+H%43s5&^jdY}Lud$N9u~PD3cdl`0 z#A>{HF-bpW1z;Vk4^B8b+TZ*z{U5^*c+JdR5a>K#+MF?vOYP3;^}22_aGCPb`V}o4 zkse`gO9>-j0hu>oVKr&nKN-!zMEibP>|av)Qhg-b#uH zVToJYNnj%mneyZk(jYDeq4i{LDbyn?E!&?_k$^rISPxhI*vtzB^m)-i=kXo@0cW3& z)(TygiA?7zHMcW&nUB;Mduxsah)i?>B~eQmQ83Y5FW&f*zuwYyJBweg!AKLCC0z)cwG^>jEq>bs?=dT9f! zM?k0TlqA4JG3oa>*`c&4&0t4e{rE{IQ3e4Fq2!jlBTv z&hEMx%0Ay+_4V49>WHG5@0peOy_?`3>AVF`nU5+SPmF{l4xV@wu~#Z#fN+NCeDiL4 ziR*=K5$^i_LcVI#Cv~ehyG0z7l@rm)W=d}|{r&3k&gdHmr*U}@HOvv^>%JgbKvetn zljdV-SV)5G_nw_$SLKITwyt~%nJ6}4tI-@0V*VtO& z`H`KDOZB9Zork^EB<)Os)CR6lqRhy=Zp+@i+3 zt-2UL;mNkVvHkPl(Ef*Bx?d;rJ}%lYKt^-^&l1aHwC|1<@75I*7mAUk9Muz9-Eff--Q_0R)Y)zzp_wM;?3DH~2pCBvGCAJVZEPX>@(sb`Ze{sj zJ_nzYixj-7O|sI>UUaU%d>IK`{~v1y1I#VOkEqEd0f1x=YV-7XCDmcB45Vd|5_o#G z_}C`%-?+%3CzL|@_MWGvEipJAto^TE7!RQ>uPY5V^CC}=81AqZyR_aO*I#ui+50MT!U z%k7Alu)_C7e^?8lQFU3s8UX4PtEJC_Ys{{NEkl1J-s#->3UUy6$BC)$8|||Vo!B-z zn@jvIO}&N`U#nzJQ`iIi&W?zy(Tg#XzJP0;E06fV%n~OY`>(*-^H-b|>^i#?)|dP` zhUdX~^{)>##jxLxSDuyQ#SZ2%!}*r`0V`wv+)|z9YFSm9^DQxOYguR-Alh1S_2#_A zi?QZnYz`wL{megE9`li}O}5#-%q~gbwO$%|-Q#qF>0?#;Dv7IG72u-L34BY?hT>eW z;`!=;Ym0Uy+i;5(aY=qqbZm~8@w#ix6-c%+FknX}3(kaypcMY?Z%mkzONK$?4jpqi zXdU@)Rg6gwYJ$IH>j;DJdC7TrOmQR#KZq6StN~aNS}{dR)|Dd0QN|%t2emHIL1l?L zD0WNikH;bI&Tv%JCox!nxF|Uj6c2;c{bx1PX)*&Q+=@PRVWo1+u>bIYJkH(7#&L=X zx{5=B%a@^}_q|)@Z<6}nUdM$()(d2XuqGxyAqs9C;q*HSvVj{9f+g>lcV;G7cC~5P zTNB)ua?=A5aV+@LmMa^`U;yF0;9`lgef3EhfIRVffd{D@hs-9zyT1D$8?p7V&Z;RyB}VeAP5Z~!24#%SR^5G( zh90-A?@@MyUgCfx&RlqCm<5tx)@0T&se9y~Vif-@Ax|W)zDtfY>MgBEz&O(kNMf9C z=GR-mS#W7Hq2Okb*@H^7bgw~|ql$6mw@;`8=sImra!kIlLz~W5L5cJV-G-v+ye(PT zXp>!JW67O7v-3p_qjBvz>sa)!KRZ2FOc4D-G?>~FOg7u1`l2aN%l>DoyP+eL?j2Bq zO}j&k1yn;GUW8S`1_I5Sly{A5Iiq`_b2VRXoR}XYi?#Ag1a_Djy~z=^GjmhoITg}BoZve zPtpzCUNE@bk6t61C~1fuR@pv`eNa)Bbzvs{piP z*B^W9A#55b<75UJv!?IPwq%%$g^|TT!g!kU(E_T~dVpdk0x0HTz*kCB16TH)4{%|KwU>GBy@AUA{c~>{rQ>wyGgkXPn)3v$`Iio_% zo&U5eXLP+1-t`vqXn41L*n+9>(kzSb%}um-*Po@*hd+Kd0h0%kM|t&P-vC#NuZkrv z-4`(cy**z7N!#GMZz+r01UdeYhiyqDcY)-j$y3_{l^#|THjM>IB84N|D3}!Q5PQ-A z8CHEXPPXhHSRs7>;n(pO5b8W*Z9p>4|F$gX1XY3#f+V$Y5asP1;q&2$`axAw=e@6XuJ`*UnWkxXeDEMwyT>o8ji^o9!~ zI^lzRWbQc11?TX^D1WASHrihGS> z#b%kj6c)((iAPt8?HE4^CcKDW*|m4nNrH1lRU%g zJym;M7S$av+e-qeW-lpc80}k>Nl2`zYn(`$GW1CIuq?#PY-}ogPMZ}X`b|nC-eC9J z1a~v;br*suN#5wMFh&%p^5j%jXq~Zel;++?cbyzyMU`ExnAL+?Wdy+qWaZ4S6=F)EHGAApf})(& zUm$HeFA3nYb9x6*KoLIQDf;7-(+|eS$?=*x z>}+G0?Uq9XyjSC7&)e)*XU9?723^0;s2m{9spYj@l-(pPw5V!0VCy#v&I3Dg7#Mg$^csi1DM#}S*`CAghme0T0i&YUnj~-3Pht|6JGT2GvnBS;}t&wh+*LxcL znh|AkEqb@cdXk+1<`&BqYr@LdyDxf)9h|sQpo?p!6RP_Dsz)l&j?gG}otD0HMyg}A z-tzC2XNFOPAjQ?)KbKZ>&}$V8c|uXk@%IIs5b=<(=Ise^gP2*Jch{`x$b=ezqx5@t zNX`GmICZz`(szZ9FWWNby>GFN#G1HS{I34NigL0&5euK+?^YAiqX=o8NG*-Q+elFC z?}Q?WY*1n0nYcFZxjX9hIoKNUDO7;Es}3w2_!TFdzOv4cbR){d>ngI_(QwHvbh8Q~ z(DLR{_Nx%<8w2PZE|nZC3;Z-2an3Y!B(K4>`kQF1S9`_x_(L7n(?;sbJ_oY_lW^xV zEdnZ?2ex3;6Ci2R1XxVuo4=zhtpzu}&~8g7cz3 zwDyg#n>uCvn?<=a|5!|?_LCY8Aokf+a+^(s_c-2vCyKWEak_|&N=c>>SPHC=5>lU< zl&UC+$6vf)xB&)Gyjt1Cm2&97bYnT3Dt*_mJ(uqWcf*6fL8CAr=0Cp}(CO^P-Hmhy297BOKMeG3G;mwckI7L}yx4ubQag9B?pF!-79S|6&~nJLE~>LqRa|lB$W|Bh-eHWS3A2B5{gw)UxTW*4 z_xBpE65skPySTtncOhLgIgXW|VYb3={M;SjHmIig>fnV||H-F1KMCtr$%CQqQ>7J2 zwfM*B^4I+s0nizKYu)K`Np3HH2DhMf#XRnhYS@8o(R~HvyWaYKDRu>REpa}7`~A;S z3&lmCx11J~l7C1@#GabEQLrtn@J@^~^Nku7b!`{Npr{tS+Y(>yF1UF$(E4f2`diA+ zK|oEc!M8}~_R&3}1g)7s73tj4-UPtvH4K&B&nDO)zW8~#e}tOh4$Qo^liwSLk6Z$G z9kP+Q6}|Pt)4vE;L@WUmJ`?vx%o}8g)v}6*Y@N(X*d4LExaZm@> zbjjYyI0A^{p257Q6a1?Qt_0x#5Y^$Xehk@kDBjet*O3EuyF-vkTPs&A?egxu(Fse| z`h@lUmwrz;EoF;^$H9YBfH=>FD9uBkKB^zayyM~3s2H(mLg z`}NS(%}a3>@Zy6bQ~q>$Zh&GGUQ^cu<^xwLUF1aDjgFJfC-AJf6Wn*uJB=L@LJ_|6 zfAFIF_`B@Wch8<`M(Tk}mD&IPH(4}+c-3F8PLN!VI$}GlH0~vJ5HqQK^ssghz~qQI&3*jr@X_sAm8H`cf&imp+yvA|FPa zjrViHj%OzzBt6qUt!hJooHqy&J{@3+CTx8#Fu!LsG@gqj0H{e1mt6x)Ksb7&sWIP} zxF;;wca-AK%)vcX@uXvXy_nkn+gv;Zx_{!h6YjJd*WA*!`_vAT0EjNMQD6lK{)KB) zMp$L+MSpjOv*tX0V&YH%yCP;OB*#E#Fy%j{H>ehim!U1v!8Ungleoh7a0Nt}L@Gim z7LM4>+9(~lIw9w~B>bnsS3ZRjNJyu%=h@Y;ks)I8Z<>IIdvaOEEuY7uBMEm7t^%f9 z%ayH{VD%ewr=@4^;d@zoqi9EN65KrW2*!VC#J;H;r-mjy7ZOZ-{Tt`GJzot$yzL+d zuoAUY0(kw!!B2<$E<_I1xr!v&A+IlT-&$UJPuKn_+DSBfZc6;p_+(zW z`Syb_h1Mk2PMEv|lcU^3 z(Q9*5`1&Uu-QNh7Wg0Ao+2x^+(foVlfGAqvg!OYm|5~7V{qvKtTb=Fhy+yB{KqdSN zzHMQom*kf0W266vs;`c!vfI9f!=a_SLAsRg2I=mW?(XjHkWK+1C-nnH7+^6`@H5#WdG5QqbPLOW#OP_f&) zXZ;~7fATGFThf*sc%@9(lQS=(ZAZ-sZZzaa^HU=taOf=bR_JN^mt&9V1`-PCpHm7! zIoHLP!1K%8FQAlBNtg#WbPRz2bWSPb1~Oo?rA5#22A!(A-s4>t4d>$`rnhy4JW+{4C@*WoBzmV)Gk259Q2(o@s6)N=@OFc@uoxl(^+(9o@)@$Xj2d_QN2c+I#~9q)xVhAd83V%O&tg6wL*TyFW$IBM<8r5hVUe6H7i^&6u|WBU(-l$w zMxR^ePmTdPz8bryf)LNvRX5ms8^jks=2@!~f$>kA&kdJNu)!_4(1X}}?>Kw@2vcUQ z5bt*Y9J;UmCsP4R5eX8wJ}+NAR?6~SX=f>SYE!1$B670XTa>ZiPI~9Vwm9uNO0A~a z_)R>vN#2nOZ;T!h#^K?U2o~n=i0xXVK!r61AnFttHW+as zg?l@?FeK+nuGUf2`pn%w<&k0vfB&mOdDwTfHovg=pW;gC4)4)KLf>mClFI2Fd^_&q zc$0Uq>q#<8H_V{+X}xmR{;{!+66b(!8E8=GJ_Ufv34qQ}EI}=|=Z*{_bnS^p+xwn| z^+)VOrKXGTFXE?7hoi-5Pa(j|U(Y!d)T$PO1ASz2eDj?6?AlEBQdrV7t*M{krZN|Ec&ZgTdHQvkis5PBE8dbll~8 zw}%NZAn+x_cF!f{*VZln6cK+4e(SAh02K7;3|sI*l;WScuoA$9&j2o*$ikO*`Vq#O z;%+5L23=L`UoI$Yh}(Wq>>dAj;1bf{82z%xUa~wdq^9W8-+tF22I#OvfGmG3o)d&j z57iW&wjVb54hw}50P|S(Y}TcyIg(ZO%Q~)FTvdYM*J&oMo!ox^*iZeR#4Q5l-)C;+ zv##xG(F}1bnS4rKQOe{v(JAq172momF_RvExG&Wtmrztr-vZcv0J(!cOeluqZOeQ> z&ukDDAGELO!C9c5l=)!CzNqv@C-9=Rrsz|3%i>*DMO?<3QBL);AicX|G<65(^#MnUykM}_-6dAV)i#$BSHpdOpV(=0y$LPW6Acb}T$ z3%OXtwdrWHyU*bbxTtFLr)xzr6!!|c?B-0)-8`*qo)4&>LRtk)Y{v2+Ezbi9r9U4Y?Kw4ej^8QjJ6se< zzyiiT^QT6)#_#oR8dIPz|FbQ1U<+;#&S(4dML5X4#`eSUvb#ZbK(2QUt?#n+k5At@=zswZf6}1$W4fVJ7lMFZ({xSB~LX5GnLf zkLs1sn!&s$>&CRO2E#wr11FRnnU>Cn=4aVz+8glhn_YfZ&NqTebZK8woyO$!_|^+{ zL}WVQxco>bh|Aj|c&i^zA#(5`L^19cujnf$VE$&iZGjGDUC;Y4Fg6rH0*yAR)r-}d z@`F-%Er0apy0<*V?D|ew$MOV+3mr;7MQI-Pe!rG-X5M&2Bgua@bbkWg+_+QzJ~Q@il~S&;EhzT|4yJ)BeC=nQ9cq~w`ByxEX+x}}H>i(BHOofvH8f6RK!UbLGz zR134{sOc;FlOuSP<~_eYrP2JKSpZBog9MJM=~Dt$Jdxc5zMB?pVRYVi-}WcdfAyoc zsGEF2X_dgFAFgxx%x|G>a*Go2m2ze;P`?G3eXA%XOR}9CD-t+3VVw{Rst>*ue>l=q z20ntKg!;xj?*+b0pW%h#{*O7)Iy?{d6?{AfEQ?vwj1bharQ)W9V74_?M{-& zU4zTO9aYMGFID7%2ti9hs?ofawWn2}(87DEYr9f>r2~6l`bgVHjKIA_83Cu0IvAms zt^7pwv0uAwmWrnc95s#|v?tQngJT^m51OfLB~yH&rH z-B%ROf5<*UeaDnuzoGUWv}yo7-kaBsa7&UKe65z9zLvByq=SD4J3ODXLKH0K4y>(5mtbia{Hc%HBbUW6I%K6|Tgu^SH z(;*_QOOb3Ri>rA9L+=Q+=#bmTAP&A3eX?2O9beBGwoygBII0p$wtd{tkTm{iE9(8{ z%jG=G#k6)P39l3Gl5%EAhW1< zug{;?mxmNnAnMh};~uE)hQZ#hhWSW)oPCXT$|75KI8aU*0=3J~&hQaOrD;a42T)jy zVEuJE?YyP(84!uDc6G9PvH3*)DF~tY&s;O#Dn5`*Bh*f(zQ%EIq?F+DYQ_cm$GHMpvOKqp<9T*r#2wiL!)lSse92YkYB3CV zVj*M1=8ig<3}8uOvb7$V9CvBXj^a^v_!6=lvlG$5JtHtWg~Fm98s!~~wi!sX*4>h> zB0-8r30!IW{>iueXnDi?NBaIG6Fp?w9j|{^1LJ8rc^A;J20zr-K@4@^!bsV;XdcYg zb;{9bAmbEYS)JGwvf+-)LkbuW%^$97HgPSu{)2*Sim=LlB;^#z##ta&uSolvwFD8; z*|Chalf)=VfP z;oCo70Tl&Ln8pH!ekk>u;&SKH{R6;Rm5i5{(TUki&M7m+TsekdgF8ACLCY5|$mLh} zKl~jxOcbL~#FP>KHHpXO??rUPMp!rh#tU)So3>gg3Xy37Wr7yFMPY@gMTBEs0Xo4& zWHZ#G?(&Y|0qMAwQP*Vur!@sj;jf=Y0O%cW%+N8uDw}1hXJ(ScjOqwgm5eo|>LgfF zwq2k+HT2ltgdT9Zuuz2n*bGN!@ZO8OxX$ZYLiMl~d$nW|T}clvPJ_j8QzmG4Rt zhf;09&Ww_kPsb^$Rfq*2GgVSt>mjbwTZ2;ySw{BGWIRHx&|S4UORK5x$aKv}*j=aw zsD%Y;-cJ!DIRce1&a*`Ctk}uEv>&uI-hu+?atzKse{%=FM}m*ue14%jcRQ{36RY@}R7`KlVb_KT-Avq}ogFGs9#1)( zli2+cg4c1Q<(a|7-#upQkCzLYK|$4}JGbj|M%T3sEtHPEH^88k@4>#ok?GkgV~D^k z=Z$-RjQ!m!OceqT$4JW~BA~*VisCPGHj2o+q)JMM;*th z5M{R^WM@nv`kp!~WS3%2wSGULlYd{7H~LYi7nrW!gc{+*vp8fzBIhKBiQ9JVQuC25 z8ktRec)$b>OUSbi8R=`I(H5eRE1elRX<$^WizE#F6}$r+j;R%&q~`KaBa4C4(5jt6 z+dz`*nnZ86MOW8SR&GykwNdByChvopjl18oa}}@M-!2=Uwrg8i9<=*8QwaD5p*!Z0 zrbxh6eLlbylPeG4dHM+{*?_Pp!AhAZz{^Kf;L>HTA(oP~;qAn537mL&~3nE2JkI*ufq>%F^z(;r!C8L#xyRNX{t z5nXBSMxQW#ah#((qoi3D8R@w*H>m4elsG>o3@j#0XfcupZ4cEBD+7UeP6D!zO2qD& zuxPX!ceQhd#NveMXKAr&%>dB4#Do6M?-RBE|=1z;e2Ut3cJK z<35@G?0&>W2g`_;!nBaBe?-PeLNlZn10Vjf=yCdzoq<(d?duGyGaTX$13~jp>U-v= z{ZsK(RN5(=)%A6zgYTWb11UDSV&m9Q9wk&IIpaMQUS&hICbbmILohc2Y-pU=14x1V zq!1V+DH$)fB}4%~Vy|8c2Hcm@f9EV$ zT6DIefwxt$3! z{Yr)e`(VRu)CS0T%Ho&(>0c_R>H9o?@vS8$rCv$nHiU|8fYTHs@=ma)59g|e&`$qG z#gS03t4)3nMAewg9bIbCfttLvwlyhvcEgM(i|Xv~3C-cfr<%2$gQs1)#``fXb3aK{ zU2t1_d;FRMex~|dd3=A^{?t@Ald6|24CgRfd_)>|9-4iec0JPEo9s+w2m)vntXWl) zbYW_n+0ojq9k*G-WSPXx^Qn~ZyBMsPnx*c53xshlCs)tu_g5SUgts9Fnu1HlSH6#Jpp&YKQ<6EGOK^oo4fCZU+=^2MfP@;M z-`YFs+wW(-b?30jL~>1%sub67kH9{!bVxrXNN6W9ZPR9V^f6aR7Ks?h04W)hTQ~>l z4hn0|!N$vdIuZXJe$8{0*8x(9+)M7Ys$$h#a$wi9Y>c#>u&XZ3*nx2uU<%KfYzBJc zAPI>x9Le?I`lK>$HrWi)#91UI(W_ichSK@P^pd2@Twy(aS6v?Q4IUi!JO+eKG@R9q z4JnCy)AIMRdBQ#=#d^?MXZ-pIonCh~*JI67ZB)1$n4>Cu@P4~s*mSq3cXP+hL*4`M zn6O!04%FkE1WT|>QfgBKRfIZ`bdB}IXHM-;48}BZ`}fQCxNi@BW{F7*Ex`VbiH4z_ zjzxCU&EzKE64wAA>O0uSjYMwb%<14k;w93sba4ilcLYW#y1EK}l%6sYr2ghyN~M+h zISbN1azzDx+1D=aCEYm_36`fhOj#ok*53io-M|S*PAxSAz@rd zCa@5`$1$sDP9N=2)8_h27_JaP!JWg}wdIg<8)(WiP|3Njex`G|%Cr7W%=eAy*!x&B zeasK$Ml)}bMnDgRM>Z~gG*3GnYC(wGNPU{7<%=Hxz)P(QT+0 zMX1$h(pDL$AqDqhI1EyRRB_Icbk{Y<)ERzSMKLPUJ-rDHvQs6I54u)5N}7t8JbYQ) zdMde{AmE0c38&zS{&Zj79sdK-4?B&^(vJ5shRl(O(fev}bh1s=Y4V#W~PVj)-xo zc)Zaq9w#Tq88KF|>1%6n#T5Wx#=F7ip^AD`-|z7{6J)I+8mxkC9v15;_>HE5%X(=_ zwd(L1(?>W;agHqqtjkiXog$2`z3oeM!Y-5*sy|l<<+7uXyNY+CPK1VVgWj>IvrbM# zSIxd;G$_o_kLR4b{(6r9pfxNG*higY-0qdByrrxcHOi_O4EQI~6%C)A_a_>=xAZta zfDfXfd3}AGK>ioUyvm~25%Q+{d>a|O*>TblRbG&%Wy=33d?B;WV^(1m(tfI}gxZH_ zd|!z`OKL^R>070lk&A}M&Y8c()+YROWF+dGigN2kC>f{O=ghE(j+WnfEuOmF0=9P} zruioaDS8cFEArwB73JMk4(8sY!b`_)L?%S$?$>D6aZe9VT|C9?x%YGp_gO<(O3J{p zOV`XWpDg&WWyH$08A9lZ{=vD(?3^B`g*XK}zf)%|lft_p1Q391QX%vOi#UhtD@a;U z(sA)`q-y;LAYYs#1vhGe$J}&YMqL07*)m~N{J#9WZg#@i_Q0EYeWTl%DGx5w>Y`Yft-1-9N#ybFC93gW@pY1T5Ku3UPBO zny}TTszimJGOD-&>|$CC+ha|KW9;HJU^23YObfz=u`t8Y!g^ERPbL_KYJF1b*TqE8 z!h6EZ>v%}wjCC9*8eOTo0*Mj+-`Z5u_FBlZ*iy@O=*+c{G{jV#(iCJg?r!la(_U%y zn2l8qWEMt36qB=&=E0c&3N1#CL3Sx)5JlHNW}L9RA{8K3NpS$FGf`?u|GKZFo|idazp3qDk-{gzlo5JKJ6@p)I@NsVeKUe=DJ?QPK=)2YKdD%F7(q&!WZr^%a(+4rw?Z0@f zXUYs+=>rVuf4D2+6pH$6--txy(yC75jxI}GY=AISA-2&u`vPS8cnBBk@@h+kOfZ#2 zgR)vWZ+J6!-Y?D9y0(x7Q_zl?B6Q9P!3T;_ihu$TDu33xTSNyO@K-y|aE#&{b)8hc zAOR4Y4b(KubFx{xdw9t{rBzZ%jE5^zzYvtHpAA4k@ zNQg;o5J9&{ltfO11~kKHyHa&ttJczjtAkVxt*wzn&_UN|Jf#T&CxV;zIZ(6BmMmq* zukCSBUwWePWWIHLgejKKq)w#Xa}T8*o{uW)ppDvos!)#87~_SYvDWB|1ZRH=)7#_23jp9On~suh>xEqL?(TQJqa)o6*%hr>%WV>{8P%Mk zK6TH7gJa89Ex{~v_2}P?K!v^C+~e4@Wz_A?FQJo99I<4=cf`2=txQW=jQ98vlTM9!{Sv zI)^`GJWQnJ+Jc{54xMw{7WBp)fU{EYa70mKtVfwDXHF6`5?A^H zA0B(C(vot5<5z;MXQq?#GW7iEkwdsye^y^Y{Ped;jhJ)osy-@%ezkQ}iKQqWcvR*C zCga(hEt3{$b*Kg3H-FME52F_*<1S}L^Wr*JNaECIBc?f~tld{vRQ*xuM}IDMn*FRk z==wiok4u&F!y~(HUPv$^@zFK72pP8w{VkbDH$Ix4%!Do@ND$JDgsvRi8L91t> zaLVH@vh@(xKm_yf@-{kD!_A096Xs)9sB?tWY+fvdhlvb0!UE%o%Mis>T5UH|ajkPJ z1AVzPNNGn~dFUH=EmAUVrBPmLZ^ry)qS9-~G1-f#XFB6KWy{M~>PkU-hJgd5t1=#% zfE;rax#v890sRK&(+*c@+6r5@qGqOb)leNl}N>66eSl8kVTZ$$YV5oruXc z==ApE*~x%(!3*o0*@>s0iDwe8=)>7XHMzciwLo^YOtMk-Z?qcV zPciay**G^ao1d2u!ykAu%+xz(ac{k4m5XI6B-zc153eZJp~29OdKp`Ac*^CP4|m*U zD3F_~+v1)Qxz&)yLV=^)!O@Y{9QDPuREQJ0CB+bvn!2G!UIJPMeP30AwP*E7s>AYg z1pq3#^sO}STQCEo)1TKYyPii@R9@?nf<$G)wXtb2TD+#c>eBcQn$qe8W*VMa9+G%} zdHCPH>zR-PKOqrfhwk{yLPxbJNOB#zQK1v=Tbd4^uGJX#S4|Z&9@2H`me_yD4H-SI zb<_PQTGop(>iW|rqA0*UV72d^m(uWAy{eR#DnY-`84WWoq60SNrBhR5BUaC?shoBrJHFs@9U)uDgzB5S z)J{0G;FTbXK^AG zPVy^psNOrAKv#k^4GKj?Fqd;>TF|;KJ>l(``3V!wJ?})=c(UG>besZTlq#Kc#xsIu z28@`B!QEn`X##+R9B zI@KFJYN{Nhf#&hy{Q&YZEK|fhQ1FmLnEL)K_vT-}Aq=y!Ci4|;yYlB?&03LdTk!E)=XD)qYC>u;IoFoy;0Pt; zW4}}6y5o~d1j=LBqJE|&IBox~Sp@m9u-RwzheVcq`u{8>4EP1s{dSDpo^!&zecNv4mnqlYY#TR*8IS~zm4TWBD=MCGFN0*!0#76K1ik>yR z;{5G&1Pc(`44|k^lM@OwTEci&poFi?)Z_ZU#)EuKL>DI86k=ZdZm<-(r~95|brIIk z2krM{Gh8OF_bDNq*C72iH=}Y?1-bqY?U5N)`tU_hUe_}9ygia#a|t~R4$XixQ_jz_ zTJ5ln%>$WAtWRVs-WY0$RR2_ue?G!Xx_+FmN58l~`c8kwHXfP&xp62m>K*>{%G(*g znZo8#GkvOgS@yBcn)Q7#q+E;5Z7!w@nNMHeI;M1lQkExLe!f$gbI3G4y8l5&kAw8r zUN6cBCA z7xl%`3AoU@I@T%7!_e+iDuN=j*U?`+M*16)E|mSbKIlQ~11co5l1j|g5S$B>Ek{~P z%_O~OCZaP{e($xT1FG0rE+ab~;=u=IfS-JF>0bTwfMlFoIm2pxn2|1i2G$#{{sQ|_ zb~6up97^ydOy%?DP5;HCiM^IR|?TkQ7JFXI-m@G3t85FrhzF8 zuuBiZS2G@zIa+PGCAXieE*42_-k3~dAGlxtsEDT*34)Vz4UIG`64*y=kIU%$)TJ1g zCoJ3i`%MQw|Hu3nW{5%m6K+*ab$19ygwf9(_HsQQ2@?de|IPj=ob6brHQHV@8O>Hr zVVUf}K)pnwNn`rF(m`dOg2+bQnvd4>Mbzv$?`;M&8sCrL0CGb88^O4+_&jg4g$1*- z7aEkq+8|uh_Rlv*5xFkLT1_vvPWRj`7O;v`Gv$qhIw|-aDglT|p@yXyPWWlm)ym=I#x-LN||=+lV9~bv_>Ih_CcpeO2RN8wSCd& zJH?fqj2qjyM0v(Hr)YGQF(EVK&h&SAgMh_B|3%*!44fxEF7F7JWx%GSV z!|^-9yNB7}KRy((ZbL6Yb^jZDTo`@te7i%Z22TDxADzV;TFD=TX~XWzU}ujeEEIzP zeRv#%r;k`Inn4Enbk1F|BrQKw}@0XvZC?&)Jb4zDRj%#t!{h60DAS9~28q;I{o zXW0mqw6}50Ol0a70z{JapAz1^=4@JusgjN148xL;pafvbQZK3)#iKzsBn@hXAzO~% z^c6GCPq&YsRP?^{l7Apmx%Crnxx6scq9FMw0p?CC0A$wuCy*XRM8hxy_q{p>tiD7> z+g=(})5}1#y%wXm$w}X6xLSoXz~qwUo)ouPNA|)N!R*^oLXhE}DBCw8A=#|p`{-ak z?bx)v6bA1EIKltseF_jK5(QTU#7;+SCYd zY5Ps1pP%K!TK9V=oh;jXS?-p|JnNzLFL(rmBs7pU&vwUSJvzvEvA$@#CLADwyxq{O zMyzd{S{j+e+2sVz({Ua4W^A)jA z;FNp(kC%42^tbt1&C|o;@yV)le#*{x*>jYJM4-6Lw4C>t=Q14mvebov&u15_WTp%W z?lnUgGO7Y=NCc#&?UJ&ZZ|q-FTqoNKK9J@VVCGel5_L2g7#M`wBmGE1dPn(Q1qRvm z=hPgvDu_#R!>kcWQ?Sx9t{&(80Akh_m+?WR_P9<&P=dHbS8f%PIBW^uRL=izoZ zDh&!KObSoLL7+&2KClSGe=trZEsMFcNM}!!{xCCLd`hNN-jSH~?q2PBydd$xhLk2X zh;m;vO+C6^il1g2O(ItMzstUz0n=Ae>O6ISu!MJks3UBh%F`)o-+GS(&&pE=y8Gk7 zUlLN{z6y4oOK^!#J~y}OP>zl^BGlwCq+nX=%-Hr_ir#H7enz=vWYvgGQ@7u(C2Kng z&a6CxNGLpl+2`sokw%zT(k7!{#;`CFB07Lq7pssk&^3eErIFqc0D^=#*d~gvBJV^~ zXM^BCg0|7CPhSYpsGY|3;78E<>_rh+J;MRr%Uv>4I&B=3uVpqFY< zX64BzhLl>WNANKaC0Ruc;ZubEKva(8G%o z;I;GWxRzvkO7(mAK%zlY>bwoM`Ap?NnZgtrQ`GdSyUc=k>XSVzd=l~;Bv(Y2=Lex& zlVE9<61P&B=k5lf*!P1RY(TXU-oN^wp@m|D{#A8z%yj#NsL?eJ6D}YHmlpzSdb9a> zxe{MTA!0POW_@Kv>4lJtXCO)M0F;5~fPc!sk1?xVJo*w{4y|HKPl8xC?Q03X|5Elv zq$~fAn$`i-zZ9Q_l8D7fZ*Z>eYnMLeAL6s}NQfWSY|co`O6!su_sICP>?DWdE*S%LJrC(R29^x6@qZZ* zeO}9724oBD{)R_bM*xcvFp=n}>Qz=|@(xRt)AFq4<4%nQTAdrLe#Z>ty>uW)tS?kr zKpbD*mXvcXdR!KFeaK6)Rw1=OB1WSUQ>gr0o`Fk`Q;Q|Yfi<2fX!_iUy^8y%5o6+6 zRQ$$kl#(*_>UZ{-^$S-=+^5FO5lDht{js^w-y^KE@%W$tTMt0#-P?h`%c z(!<&r!Xpc6+_w7`6afgG21BvU+8!)?+K#?)O!YSOU{mebUTdv?hP9>*9X|;CA$@ut ze)P(7bV9u<{QS+(1|T@S;!QrZ1_r{9{0bQ8ni=tyQ6T}hwY9NH=A$))j&Hd3I8>wk z5_B$%H_I@}=+08+u8Od@+Q*E#+!(DS>+myIF2BOwZ*h6g z{-4Db8+?YjPWQZ7yiid({ff;!D)ekY60>eJ?YEVc4DTX~T*7Y_&XefO?`s7Z4KZb4$Nrzwhc^)Njy9;L< z{&Pke)XTVII#X3xYl__C@ujqH2Xh6h9|=eonNF#@qdo7>KWqD zcM1%j|NnKp{COvH1yS98eUO*oKr5u(s|S(rlT_ROEowgc@OEpBD<};5gGEQJ?SUE?19R2F|GJQp1zcFfOxbf9TrH}!9nvlZPbcKV49P?g zp*#TUpQl`aQE|rjFhy<@ayuX7O!>zpBn*|m&J1gJxnx=9#I`=< zcHZAio3;6tqf>?ecX1_lleJZvgOLY;#k_kcxb)Gx@T>Mf>*o)xu^v=8y~}5K)mz9~ z^wU+SEPMM{BPtyTnXppeqihgNMK3a^%%tiy`^d;RWhs`dVD)0T@(57+#o&=zkYdK& zWZ&8Ei2rl&_pCF(gJc7mVYD#i0-E#Cbbr)l{BqBXLxZ5*BUxjdqx9=L=)))WB9oKv z=+X@Zp6Q1n9GGLL?SQ_uy5!i}X6#rVxOnjanB_kv14P}n`W^<%g+xiE43{}t&ZU<% zx>HIH@REg%c9Tu(1*zh8TTsg~H#SsJBT>ru^gwk^a4>JEwR`n*l>;QAhtfI@XBB-N zZ3Bpt7wKA!ng((_htloH1$5#G$OQ&WoH9%N07Rvz9o%`v>HaYOB0xN4?ApZe^jlj- zN%zf-c}X?{ex}!L3sD+_OsV;UmcK}d#lJumQvid#Wp-DL`a2Ip9N*ZACmM6Qi7lT& zBrfnOwYv%;&2W@ZFeB0Vh-5eMdW!{L<(%Lqk<}O!J?_FaABH)^?fyA_GuM}$Y|L=j zQFcm;OVIF%P7KhJej$rRYzF0=;K$S7EupEBa04ENH@m$Y#7c0Qz^NFl06dctwHU!A z#Ee}D$q!K_BvWxopQqK+ogv%i>OeKc&VqO2gGOSuHw}%;A-LW+i#`Q+?axNERk^T`Yz7&G*zvG;q%sOqpQEHY zX%QYV{;kVt^dV*Kdq!ugVxt%$Nzv{v+<&@kQ(Lc&OEWn1_&ei`St6=S%DLoG1h8W| z7LVwHv^etR!!Wz+tgazWlM(Mwu-%rf)vMAUsbR3Zm{Vo0Yp_Q4vl_6~Ag`x|b1jez zaKT*{V3ZkVr7kxPTs;664L zvLvaVKhAf+Ofbx!8xu2S4q7i$ z5@|7DRAI>mo7F!j9sn0>#1w-XuoTA0sQf0X0LXu36!p|IFeiiYiZ<3TAMq)Gp1VTJ zWHT@j&LnnGM8b6uLm}$4`Ay8G_QI7}`v)^+_|(o5mnzLK=mKG%#}62SNK6ecUQ*4p z=}=MtbXx@Ixs4zrVU(O5T~9ypW%L zVcB2pEadYtj#lHGpPph|5_>-e!75{tp3a2vZ`l#c26v@>mDMmNFJGRkmfHq|2Bl_( zaPy^bj2!2k0X^=r$ej|mm#dYVOV3rvtO5Wi$Kp(@$ORQ$ZZxpj<$9k+eq@^(=%BOQZ1%)1F?CthXcppNCD(`1s@nl zrGO$7&h}o-0c;beLNg3G;0_G59oM`x*hOe8PaeoS6v|Yto9A@d9^*IX_ADc(g%kw; z7>9oD`$}BH_!C~rP+l~3^N*w1cGH@LNSr~g6>^~3}c2r2!tl$ zPB)c6WEgCOE80;OoBZtUmYrKC^4b!OOtu(tV&I< zUCzpvIGH2!)^JO@xxY>yY07MLMl(K6=P*dwYk;>=+%ildgguTF+U?_}dpIf*@6 zOUn3uItT|s4YdOeX!zc%SeAEm`XmsU>@l9ZAMT5+o;nBxK`i2`{ z3>=C+J?u|0AR-2uOm)B1iIvTqT>9QX@^@eNgJBCd=;(T`IdHyF!GS-&EbbcRy*1IL zau+h>b^-eX8>koFTT1MMdgJqVX|%=DbQ8G!mvxJV?ppB8<5Fo3L-%`)D_gpfUn8kk zT_2RKFNEa{W|P%_G5t<|*UhY&`vNxC@Og(%FtohTm7^JkKO?Q=DTHat9c`9WkpW9@ z2o)I^F^c>|(~^m`Y4U{gD0>p8{3KEXYo;A6@rgk*0-m9-D& z=jHIfi{Shfv~!rd?bJ>tde2Axs>=nAqH|K;AtG$%do@#jv)&FqMK@hmVs0f8i*?k( zye?9Pb~}@zzLpninC3+NIJ-Q>4xM~dDG~H6sU4k; z0uPj^`X~azLW9Ezdy<7W{%k|m8;pFpNfF5O_s%68NJbA#W}H%dM-(^8VZ@aRr~e`V zXHhlOw(H7q>5TO#=*x#<*H?9wX^EMJohWZF0`ePx1ukeHs}z{VjAnHLQPClZ+{{TT zR6cgg=_;m_2Cmv z8g)@iusiyR@M#tOj7G*pq=?>HqXZ!%c71<}g=RQMTq%@~lNv=G;D8=Tb7@uljx}f1 zJ$~{{9(KjNGY|JN-z=KJm?7>-i``e%L!!TRMYs#b%AWK3X@d-MHqfXb%M2wLcRMjr zD@Oeh8MRIs4mi@d5>gdPpYOJ#ZWs>sQgUPd0z80Te?aAc4hFI_uzxNdi z(!6;-Vt?)?oIsDx*n!_8cEF=WXKx*e5A#)`s^6og8tZ#IDHfcPn73L@q-d8sElNZV%1I!j zTZfpYXU@$=z?=dGg<=&`BwLD7@}}?Rj)vxdJpW&bXMBiquI$5+y-7n^s!Lg$o2B$# z{?*-BFp00@U+0PK*Lyk zL(_I`aQYs4M=)(r{vMTJGQ$433k{||W>uGwIQKxVbei521)*)9>6(rXp}}A(rw^~1 zXm_|sOqS8Td*Qt^&q?=YJqvH6^MiVf3;1Dlu(#+%5*uK+c2>-&*)A9Ht3(XdMLHWU zu^ID&rrC@Mo<)-{6_HDpiY2@P9vM=a!mdDN9lU+_qFvZr&#aWkizwkn-pBH?c=a@w z(FqsvO@-_O1B-m6U6=dU-_E?KEJeAhvPk8M1`=AB7MAVLVb@jS#;Z1{`A;BI2!=cS zp*AR?4U6FW8T#uk=<;qcNX(HQR*0i53z*UE_SlU>it^8H4x{W(-;gC*KOA>@rzq+_P=lqjEGvvsy+VK!ov2Z`0?aCOk`3I+7j7hsI4WyoCi<4sMO_AZ5x>ppooFs z>jy3uMC61VVQU@wp&bsf6tg5GDgotgHj`wJNn~V|k7yX}bprHV$jp?V zGM+o%sw9T6=3I1JeU`Hjds485;5tEa)w5IOxyA5(wigBiTRO-gNJYXu&|ISlrqcNxP3_OgeP&R_i<>zOW^+Lu6B=C{R8NN#ML*Zc$ zW!g@RcyivvCP|^3sSkh{$}rkslA@v5cXPaQDvu!0!> z1GRss*$&x+s%~kfG8t2VO?P45;d`^W8HCWC8FBS|v_Ga}9(@tj$lY3vlY0~luRg^w z;pD!dl8k)qEu#D!t389dx(-ULkF?E5^(r22ODCp2kA(xI6fzjtiGqH7_)rcMR%%sj zWY>dyDe+k582&;4UG%~DI!=lCRLb_*(&k>?V}DM+t}1;B|8@UtEEV<&KCw7nbducv zpw3ep569yMQC-06ATai90vvc4z|l_^npi9rfBz~02ijP&Us1Gjsc z!#LXc8P8)f#B|IIbo6R(cP>5mJG1|2>*$+ffC*uLn5&w^kTTa0Cynj>`J)Mu2}iSv zL_Oo;tegQZ5~u-=gpC&vWeo?8(Sd7ZWvbo!^0l46RXc<(lx+Ie<`q>)1RpZtrrB*+ z`EWe4k=^Z=Su4(8;U*E3&-KgH@r=&ck7BlPm79G1*O^8_f%i8KWqM1w?X2I$|4IDw1ad%0AZ^y5U5>D91#@sVwZFV^{C)7z$QEH-E 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

  • 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

    + Docling +

    diff --git a/docs/integrations/instructlab.md b/docs/integrations/instructlab.md new file mode 100644 index 00000000..5f3b3315 --- /dev/null +++ b/docs/integrations/instructlab.md @@ -0,0 +1,17 @@ +Docling is powering document processing in [InstructLab](https://instructlab.ai/), +enabling users to unlock the knowledge hidden in documents and present it to +InstructLab's fine-tuning for aligning AI models to the user's specific data. + +More details can be found in this [blog post][blog]. + +- 🏠 [InstructLab Home][home] +- 💻 [InstructLab GitHub][github] +- 🧑🏻‍💻 [InstructLab UI][ui] +- 📖 [InstructLab Docs][docs] + + +[home]: https://instructlab.ai +[github]: https://github.com/instructlab +[ui]: https://ui.instructlab.ai/ +[docs]: https://docs.instructlab.ai/ +[blog]: https://www.redhat.com/en/blog/docling-missing-document-processing-companion-generative-ai diff --git a/docs/integrations/prodigy.md b/docs/integrations/prodigy.md new file mode 100644 index 00000000..8bb40c29 --- /dev/null +++ b/docs/integrations/prodigy.md @@ -0,0 +1,9 @@ +Docling is available in [Prodigy][home] as a [Prodigy-PDF plugin][plugin] recipe. + +- 🌐 [Prodigy Home][home] +- 🔌 [Prodigy-PDF Plugin][plugin] +- 🧑🏽‍🍳 [pdf-spans.manual Recipe][recipe] + +[home]: https://prodi.gy/ +[plugin]: https://prodi.gy/docs/plugins#pdf +[recipe]: https://prodi.gy/docs/plugins#pdf-spans.manual diff --git a/docs/integrations/spacy.md b/docs/integrations/spacy.md index 82a20890..a0578703 100644 --- a/docs/integrations/spacy.md +++ b/docs/integrations/spacy.md @@ -1,3 +1,5 @@ +# spaCy + Docling is available in [spaCy](https://spacy.io/) as the "SpaCy Layout" plugin: - 💻 [SpacyLayout GitHub][github] diff --git a/docs/overrides/main.html b/docs/overrides/main.html index 195acaf1..74749abd 100644 --- a/docs/overrides/main.html +++ b/docs/overrides/main.html @@ -1,5 +1,7 @@ {% extends "base.html" %} +{# {% block announce %}

    🎉 Docling has gone v2! Check out what's new and how to get started!

    {% endblock %} +#} diff --git a/mkdocs.yml b/mkdocs.yml index 43012b1c..dd4502d8 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -52,8 +52,8 @@ theme: - search.suggest - toc.follow nav: - - Get started: - - Home: index.md + - Home: + - "🦆 Docling": index.md - Installation: installation.md - Usage: usage.md - CLI: cli.md @@ -85,10 +85,13 @@ nav: # - CLI: examples/cli.md - Integrations: - Integrations: integrations/index.md + - "🐝 Bee": integrations/bee.md - "Data Prep Kit": integrations/data_prep_kit.md - "DocETL": integrations/docetl.md + - "🐶 InstructLab": integrations/instructlab.md - "Kotaemon": integrations/kotaemon.md - - "LlamaIndex 🦙": integrations/llamaindex.md + - "🦙 LlamaIndex": integrations/llamaindex.md + - "Prodigy": integrations/prodigy.md - "spaCy": integrations/spacy.md # - "LangChain 🦜🔗": integrations/langchain.md # - API reference: From af63818df5636c4cbe77c0a01e6dcc0d47c4bfdb Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Fri, 29 Nov 2024 13:18:06 +0100 Subject: [PATCH 22/40] fix: remove unused deps (#466) Signed-off-by: Michele Dolfi --- poetry.lock | 514 +++++++++++++++++++++++++++++++------------------ pyproject.toml | 1 - 2 files changed, 328 insertions(+), 187 deletions(-) diff --git a/poetry.lock b/poetry.lock index 7ee6070a..9221eb2d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.7" +version = "3.11.8" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:8bedb1f6cb919af3b6353921c71281b1491f948ca64408871465d889b4ee1b66"}, - {file = "aiohttp-3.11.7-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:f5022504adab881e2d801a88b748ea63f2a9d130e0b2c430824682a96f6534be"}, - {file = "aiohttp-3.11.7-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e22d1721c978a6494adc824e0916f9d187fa57baeda34b55140315fa2f740184"}, - {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e993676c71288618eb07e20622572b1250d8713e7e00ab3aabae28cb70f3640d"}, - {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e13a05db87d3b241c186d0936808d0e4e12decc267c617d54e9c643807e968b6"}, - {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ba8d043fed7ffa117024d7ba66fdea011c0e7602327c6d73cacaea38abe4491"}, - {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:dda3ed0a7869d2fa16aa41f9961ade73aa2c2e3b2fcb0a352524e7b744881889"}, - {file = "aiohttp-3.11.7-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43bfd25113c1e98aec6c70e26d5f4331efbf4aa9037ba9ad88f090853bf64d7f"}, - {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3dd3e7e7c9ef3e7214f014f1ae260892286647b3cf7c7f1b644a568fd410f8ca"}, - {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:78c657ece7a73b976905ab9ec8be9ef2df12ed8984c24598a1791c58ce3b4ce4"}, - {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:db70a47987e34494b451a334605bee57a126fe8d290511349e86810b4be53b01"}, - {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:9e67531370a3b07e49b280c1f8c2df67985c790ad2834d1b288a2f13cd341c5f"}, - {file = "aiohttp-3.11.7-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:9202f184cc0582b1db15056f2225ab4c1e3dac4d9ade50dd0613ac3c46352ac2"}, - {file = "aiohttp-3.11.7-cp310-cp310-win32.whl", hash = "sha256:2257bdd5cf54a4039a4337162cd8048f05a724380a2283df34620f55d4e29341"}, - {file = "aiohttp-3.11.7-cp310-cp310-win_amd64.whl", hash = "sha256:b7215bf2b53bc6cb35808149980c2ae80a4ae4e273890ac85459c014d5aa60ac"}, - {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea52d11e02123f125f9055dfe0ccf1c3857225fb879e4a944fae12989e2aef2"}, - {file = "aiohttp-3.11.7-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3ce18f703b7298e7f7633efd6a90138d99a3f9a656cb52c1201e76cb5d79cf08"}, - {file = "aiohttp-3.11.7-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:670847ee6aeb3a569cd7cdfbe0c3bec1d44828bbfbe78c5d305f7f804870ef9e"}, - {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4dda726f89bfa5c465ba45b76515135a3ece0088dfa2da49b8bb278f3bdeea12"}, - {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c25b74a811dba37c7ea6a14d99eb9402d89c8d739d50748a75f3cf994cf19c43"}, - {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e5522ee72f95661e79db691310290c4618b86dff2d9b90baedf343fd7a08bf79"}, - {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fbf41a6bbc319a7816ae0f0177c265b62f2a59ad301a0e49b395746eb2a9884"}, - {file = "aiohttp-3.11.7-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:59ee1925b5a5efdf6c4e7be51deee93984d0ac14a6897bd521b498b9916f1544"}, - {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:24054fce8c6d6f33a3e35d1c603ef1b91bbcba73e3f04a22b4f2f27dac59b347"}, - {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:351849aca2c6f814575c1a485c01c17a4240413f960df1bf9f5deb0003c61a53"}, - {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:12724f3a211fa243570e601f65a8831372caf1a149d2f1859f68479f07efec3d"}, - {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:7ea4490360b605804bea8173d2d086b6c379d6bb22ac434de605a9cbce006e7d"}, - {file = "aiohttp-3.11.7-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:e0bf378db07df0a713a1e32381a1b277e62ad106d0dbe17b5479e76ec706d720"}, - {file = "aiohttp-3.11.7-cp311-cp311-win32.whl", hash = "sha256:cd8d62cab363dfe713067027a5adb4907515861f1e4ce63e7be810b83668b847"}, - {file = "aiohttp-3.11.7-cp311-cp311-win_amd64.whl", hash = "sha256:bf0e6cce113596377cadda4e3ac5fb89f095bd492226e46d91b4baef1dd16f60"}, - {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:4bb7493c3e3a36d3012b8564bd0e2783259ddd7ef3a81a74f0dbfa000fce48b7"}, - {file = "aiohttp-3.11.7-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:e143b0ef9cb1a2b4f74f56d4fbe50caa7c2bb93390aff52f9398d21d89bc73ea"}, - {file = "aiohttp-3.11.7-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f7c58a240260822dc07f6ae32a0293dd5bccd618bb2d0f36d51c5dbd526f89c0"}, - {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8d20cfe63a1c135d26bde8c1d0ea46fd1200884afbc523466d2f1cf517d1fe33"}, - {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:12e4d45847a174f77b2b9919719203769f220058f642b08504cf8b1cf185dacf"}, - {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cf4efa2d01f697a7dbd0509891a286a4af0d86902fc594e20e3b1712c28c0106"}, - {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9ee6a4cdcbf54b8083dc9723cdf5f41f722c00db40ccf9ec2616e27869151129"}, - {file = "aiohttp-3.11.7-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6095aaf852c34f42e1bd0cf0dc32d1e4b48a90bfb5054abdbb9d64b36acadcb"}, - {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:1cf03d27885f8c5ebf3993a220cc84fc66375e1e6e812731f51aab2b2748f4a6"}, - {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:1a17f6a230f81eb53282503823f59d61dff14fb2a93847bf0399dc8e87817307"}, - {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:481f10a1a45c5f4c4a578bbd74cff22eb64460a6549819242a87a80788461fba"}, - {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:db37248535d1ae40735d15bdf26ad43be19e3d93ab3f3dad8507eb0f85bb8124"}, - {file = "aiohttp-3.11.7-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:9d18a8b44ec8502a7fde91446cd9c9b95ce7c49f1eacc1fb2358b8907d4369fd"}, - {file = "aiohttp-3.11.7-cp312-cp312-win32.whl", hash = "sha256:3d1c9c15d3999107cbb9b2d76ca6172e6710a12fda22434ee8bd3f432b7b17e8"}, - {file = "aiohttp-3.11.7-cp312-cp312-win_amd64.whl", hash = "sha256:018f1b04883a12e77e7fc161934c0f298865d3a484aea536a6a2ca8d909f0ba0"}, - {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:241a6ca732d2766836d62c58c49ca7a93d08251daef0c1e3c850df1d1ca0cbc4"}, - {file = "aiohttp-3.11.7-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:aa3705a8d14de39898da0fbad920b2a37b7547c3afd2a18b9b81f0223b7d0f68"}, - {file = "aiohttp-3.11.7-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9acfc7f652b31853eed3b92095b0acf06fd5597eeea42e939bd23a17137679d5"}, - {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcefcf2915a2dbdbce37e2fc1622129a1918abfe3d06721ce9f6cdac9b6d2eaa"}, - {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c1f6490dd1862af5aae6cfcf2a274bffa9a5b32a8f5acb519a7ecf5a99a88866"}, - {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f1ac5462582d6561c1c1708853a9faf612ff4e5ea5e679e99be36143d6eabd8e"}, - {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c1a6309005acc4b2bcc577ba3b9169fea52638709ffacbd071f3503264620da"}, - {file = "aiohttp-3.11.7-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f5b973cce96793725ef63eb449adfb74f99c043c718acb76e0d2a447ae369962"}, - {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ce91a24aac80de6be8512fb1c4838a9881aa713f44f4e91dd7bb3b34061b497d"}, - {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:875f7100ce0e74af51d4139495eec4025affa1a605280f23990b6434b81df1bd"}, - {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:c171fc35d3174bbf4787381716564042a4cbc008824d8195eede3d9b938e29a8"}, - {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ee9afa1b0d2293c46954f47f33e150798ad68b78925e3710044e0d67a9487791"}, - {file = "aiohttp-3.11.7-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8360c7cc620abb320e1b8d603c39095101391a82b1d0be05fb2225471c9c5c52"}, - {file = "aiohttp-3.11.7-cp313-cp313-win32.whl", hash = "sha256:7a9318da4b4ada9a67c1dd84d1c0834123081e746bee311a16bb449f363d965e"}, - {file = "aiohttp-3.11.7-cp313-cp313-win_amd64.whl", hash = "sha256:fc6da202068e0a268e298d7cd09b6e9f3997736cd9b060e2750963754552a0a9"}, - {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:17829f37c0d31d89aa6b8b010475a10233774771f9b6dc2cc352ea4f8ce95d9a"}, - {file = "aiohttp-3.11.7-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:d6177077a31b1aecfc3c9070bd2f11419dbb4a70f30f4c65b124714f525c2e48"}, - {file = "aiohttp-3.11.7-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:badda65ac99555791eed75e234afb94686ed2317670c68bff8a4498acdaee935"}, - {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0de6466b9d742b4ee56fe1b2440706e225eb48c77c63152b1584864a236e7a50"}, - {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:04b0cc74d5a882c9dacaeeccc1444f0233212b6f5be8bc90833feef1e1ce14b9"}, - {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c7af3e50e5903d21d7b935aceed901cc2475463bc16ddd5587653548661fdb"}, - {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c63f898f683d1379b9be5afc3dd139e20b30b0b1e0bf69a3fc3681f364cf1629"}, - {file = "aiohttp-3.11.7-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fdadc3f6a32d6eca45f9a900a254757fd7855dfb2d8f8dcf0e88f0fae3ff8eb1"}, - {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:d329300fb23e14ed1f8c6d688dfd867d1dcc3b1d7cd49b7f8c5b44e797ce0932"}, - {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:5578cf40440eafcb054cf859964bc120ab52ebe0e0562d2b898126d868749629"}, - {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:7b2f8107a3c329789f3c00b2daad0e35f548d0a55cda6291579136622099a46e"}, - {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:43dd89a6194f6ab02a3fe36b09e42e2df19c211fc2050ce37374d96f39604997"}, - {file = "aiohttp-3.11.7-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:d2fa6fc7cc865d26ff42480ac9b52b8c9b7da30a10a6442a9cdf429de840e949"}, - {file = "aiohttp-3.11.7-cp39-cp39-win32.whl", hash = "sha256:a7d9a606355655617fee25dd7e54d3af50804d002f1fd3118dd6312d26692d70"}, - {file = "aiohttp-3.11.7-cp39-cp39-win_amd64.whl", hash = "sha256:53c921b58fdc6485d6b2603e0132bb01cd59b8f0620ffc0907f525e0ba071687"}, - {file = "aiohttp-3.11.7.tar.gz", hash = "sha256:01a8aca4af3da85cea5c90141d23f4b0eee3cbecfd33b029a45a80f28c66c668"}, + {file = "aiohttp-3.11.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d2ca685c6a851ce64e511fbcb906e4dd97d13e567ca7ecb5cb30b184e15dc6d"}, + {file = "aiohttp-3.11.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52913bb8a0a72a57479f54b281300c9d23036aa9aa3ebbc9a32a643484eadfc2"}, + {file = "aiohttp-3.11.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:35dafc70051b6cbd6dafb533b4e3f0df6225a4896be373ef86367b2987409331"}, + {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:561b9596a9f90266673ef0b950c27e04ab597cdb53785e2ac91b83b33c31b509"}, + {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d479c1fdcc920056a06d04059db52eb8590ecbbb3acdcaeeea26a88ff782e94a"}, + {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ce8eb6444bb6e862feca664ce365afa8e2e32db24dcf1a502719a8a002f9274"}, + {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df9bf08eb93611b1d4d6245b6fecf88728e90eece00e00d554e1b0c445557d83"}, + {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a20ddaa58fea717177fac9a4a1fb8b39be868aa4fed2af6de4313b7a08f0f71"}, + {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9f4aadfea6b48cfa17aef1a68ba6bee5a0246374f5a588e299a4f4ff5bd1c77b"}, + {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:aa7deebb4bc5143745e6282139d7b9de50beb6d06609df64d2c993ef496bc7eb"}, + {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fe503a76b9e3a13b62e64545693c9463afe9d429e0909120f7bb66de91ed8bc2"}, + {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1c5838a68e31712354129add1b5fe32b06aa05275f835130edc650e6288af05f"}, + {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:832e58d9454fe501b0d092cdf660c0e34e16005f61acd06e1c79b0fc45019c94"}, + {file = "aiohttp-3.11.8-cp310-cp310-win32.whl", hash = "sha256:00618c37a350884c08e87cf9a6532be274d564227ac49e0b474cf41f27e1f190"}, + {file = "aiohttp-3.11.8-cp310-cp310-win_amd64.whl", hash = "sha256:8eeaac75203da1a54afe1faea3c855a1973026b54929112aa9b67bceadbcb0ca"}, + {file = "aiohttp-3.11.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f8dd02b44555893adfe7cc4b3b454fee04f9dcec45cf66ef5bb53ebf393f0505"}, + {file = "aiohttp-3.11.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:658052941324edea3dee1f681375e70779f55e437e07bdfc4b5bbe65ad53cefb"}, + {file = "aiohttp-3.11.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c829471a9e2266da4a0666f8a9e215f19320f79778af379c1c7db324ac24ed2"}, + {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d21951756690f5d86d0215da38eb0fd65def03b5e2a1c08a4a39718a6d0d48f2"}, + {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fa50ddc6b21cc1ae23e13524d6f75b27e279fdf5cf905b2df6fd171891ac4e2"}, + {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a5afbd805e449048ecebb1a256176e953d4ca9e48bab387d4d1c8524f1c7a95"}, + {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea68db69f2a4ddc24b28b8e754fc0b963ed7f9b9a76137f06fe44643d6821fbd"}, + {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b3ac163145660ce660aed2f1005e6d4de840d39728990b7250525eeec4e4a8"}, + {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9ac0cce897904b77e109e5403ed713187dbdf96832bfd061ac07164264be16c"}, + {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3260c77cff4e35245bc517658bd54d7a64787f71f3c4f723877c82f22835b032"}, + {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7fd9c11ffad6b022bf02a41a70418cb2ab3b33f2c27842a5999e3ab78daf280"}, + {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:16bda233a7b159ab08107e8858fedca90a9de287057fab54cafde51bd83f9819"}, + {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4867008617bbf86e9fb5b00f72dd0e3a00a579b32233caff834320867f9b7cac"}, + {file = "aiohttp-3.11.8-cp311-cp311-win32.whl", hash = "sha256:17e6b9d8e29e3bfc7f893f327e92c9769d3582cee2fb1652c1431ac3f60115a0"}, + {file = "aiohttp-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:7f3be4961a5c2c670f31caab7641a37ea2a97031f0d8ae15bcfd36b6bf273200"}, + {file = "aiohttp-3.11.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0e3b5bfef913d6be270c81976fbc0cbf66625cd92663bbb7e03b3adbd6aa4ac6"}, + {file = "aiohttp-3.11.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb51a81cb637b9a072c9cfae1839e35c6579638861eb3479eb5d6e6ce8bc6782"}, + {file = "aiohttp-3.11.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd2ca84e5f7a35f313a62eb7d6a50bac6760b60bafce34586750712731c0aeff"}, + {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47c6663df9446aa848b478413219600da4b54bc0409e1ac4bc80fb1a81501363"}, + {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c665ed4b52256614858b20711bbbd2755b0e19ec86870f8ff1645acf9ae9e760"}, + {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35d4545e7684da7a954ffc2dce495462cb16a902dffdebe98572408f6aaaee83"}, + {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85be3899e6860dd2cd3f4370ded6708e939d00d5ec922a8eb328d114db605a47"}, + {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ed9f1f2697713c48efc9ec483ad5d062e4aa91854f090a3eba0b19c002851d"}, + {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0dbae99737badf3f5e862088a118e28d3b36f03eb608a6382eddfd68178e05b"}, + {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:beae08f900b2980af4353a0200eb162b39f276fd8a6e43079a540f83964671f4"}, + {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d6f9e5fd1b3ecbaca3e04a15a02d1fa213248608caee99fd5bdddd4759959cf7"}, + {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7def89a41fe32120d89cd4577f5efbab3c52234c5890066ced8a2f7202dff88"}, + {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:98f596cf59292e779bc387f22378a3d2c5e052c9fe2bf822ac4f547c6fe57758"}, + {file = "aiohttp-3.11.8-cp312-cp312-win32.whl", hash = "sha256:b64fa6b76b35b695cd3e5c42a4e568cbea8d41c9e59165e2a43da00976e2027e"}, + {file = "aiohttp-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:afba47981ff73b1794c00dce774334dcfe62664b3b4f78f278b77d21ce9daf43"}, + {file = "aiohttp-3.11.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a81525430da5ca356fae6e889daeb6f5cc0d5f0cef88e59cdde48e2394ea1365"}, + {file = "aiohttp-3.11.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7565689e86a88c1d258351ebd14e343337b76a56ca5c0a2c1db96ec28149386f"}, + {file = "aiohttp-3.11.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0f9dbe9763c014c408ad51a027dc9582518e992dc63e2ffe359ac1b4840a560"}, + {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca580edc3ccd7f6ea76ad9cf59f5a8756d338e770b5eda7be26bcda8fa7ef53"}, + {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d141631a7348038fc7b5d1a81b3c9afa9aa056188ded7902fe754028fdea5c5"}, + {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64e6b14608a56a4c76c60daac730b0c0eeaf9d10dfc3231f7fc26521a0d628fd"}, + {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0983d0ce329f2f9dbeb355c3744bd6333f34e0dc56025b6b7d4f285b90acb51e"}, + {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d96b93a46a3742880fa21bcb35c6c40cf27714ec0fb8ec85fe444d73b95131b9"}, + {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f4f1779c3142d913c509c2ed1de8b8f920e07a5cd65ac1f57c61cfb6bfded5a4"}, + {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:48be7cff468c9c0d86a02e6a826e1fe159094b16d5aa2c17703e7317f791b0f9"}, + {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:daea456b79ca2bacc7f062845bbb1139c3b3231fc83169da5a682cf385416dd1"}, + {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c92e763cf641e10ad9342597d20060ba23de5e411aada96660e679e3f9371189"}, + {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a750ee5a177e0f873d6b2d7d0fa6e1e7c658fc0ca8ea56438dcba2ac94bedb09"}, + {file = "aiohttp-3.11.8-cp313-cp313-win32.whl", hash = "sha256:4448c9c7f77bad48a6569062c0c16deb77fbb7363de1dc71ed087f66fb3b3c96"}, + {file = "aiohttp-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:481075a1949de79a8a6841e0086f2f5f464785c592cf527ed0db2c0cbd0e1ba2"}, + {file = "aiohttp-3.11.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:72779bfb34d6d6b51e55a7f4901b410e416b5431738b367d49696928c91a2ca8"}, + {file = "aiohttp-3.11.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e6523f39071a01757048985e4cc22d04aa130bc40d9128503f3a61a3ee98328"}, + {file = "aiohttp-3.11.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:220bbce18b3046973465be45415430f1cab39d7fdc40cbcf0a8c05485c6902fe"}, + {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:336bbf7a33dd8cb4a7afb98c70e9935a81e5e88f7ac595ba2e84b1fb5da190d6"}, + {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c5e4f1ba5059b85e05c551961a448ce2689c6249ed6a2e2174796842c191d10"}, + {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9f9fd5c672c962389429abd11ed32c9c93f7932fd58584cae1e43951b141c6b"}, + {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58bd94ad48143e1d42e05fc055da41de0a9933f378ad87760595b8aec83d317b"}, + {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bf52642b12d70d78c18882915201bc5345f7c8f0f2ab8919d99b886aa6475a7"}, + {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fee12d8487b0df2b683424cca2a0d8fb7281d5607518d742e98119a74af01026"}, + {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:65fd04f1fea668ad1af48ac31b752000e222dccffedcad3de8ccf9d34489ccd3"}, + {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f397e0511a0ec4fe331e602fc057dfd336d352062deb9969ebd81e253a149c"}, + {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:cf8f05f4abe3288fe2e106e1461fd20d8abf6103886ddfb6d746a5b8fb830d2b"}, + {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7d71d4ac0792ff89541179394d303be846a0b6cd3821ae67286ee69ecec16f9f"}, + {file = "aiohttp-3.11.8-cp39-cp39-win32.whl", hash = "sha256:2b6f8716044ae5e5f2a3b4e4b6bfee48e97c8b2a92e56f43aadd728c7fd26b7d"}, + {file = "aiohttp-3.11.8-cp39-cp39-win_amd64.whl", hash = "sha256:da343903214bf9f9d314b913caa499fa19e26d73e6e23a3db7d4898ea6d47028"}, + {file = "aiohttp-3.11.8.tar.gz", hash = "sha256:7bc9d64a2350cbb29a9732334e1a0743cbb6844de1731cbdf5949b235653f3fd"}, ] [package.dependencies] @@ -1090,13 +1090,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.20.0" +version = "2.21.0" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.20.0-py3-none-any.whl", hash = "sha256:5875f0b0fa7a0043a91e93a9b8f793bcbbba9691e7fd83dca95c28ba26d21f0a"}, - {file = "fastjsonschema-2.20.0.tar.gz", hash = "sha256:3d48fc5300ee96f5d116f10fe6f28d938e6008f59a6a025c2649475b87f76a23"}, + {file = "fastjsonschema-2.21.0-py3-none-any.whl", hash = "sha256:5b23b8e7c9c6adc0ecb91c03a0768cb48cd154d9159378a69c8318532e0b5cbf"}, + {file = "fastjsonschema-2.21.0.tar.gz", hash = "sha256:a02026bbbedc83729da3bfff215564b71902757f33f60089f1abae193daa4771"}, ] [package.extras] @@ -1466,13 +1466,13 @@ trio = ["trio (>=0.22.0,<1.0)"] [[package]] name = "httpx" -version = "0.27.2" +version = "0.28.0" description = "The next generation HTTP client." optional = false python-versions = ">=3.8" files = [ - {file = "httpx-0.27.2-py3-none-any.whl", hash = "sha256:7bb2708e112d8fdd7829cd4243970f0c223274051cb35ee80c03301ee29a3df0"}, - {file = "httpx-0.27.2.tar.gz", hash = "sha256:f7c2be1d2f3c3c3160d441802406b206c2b76f5947b11115e6df10c6c65e66c2"}, + {file = "httpx-0.28.0-py3-none-any.whl", hash = "sha256:dc0b419a0cfeb6e8b34e85167c0da2671206f5095f1baa9663d23bcfd6b535fc"}, + {file = "httpx-0.28.0.tar.gz", hash = "sha256:0858d3bab51ba7e386637f22a61d8ccddaeec5f3fe4209da3a6168dbb91573e0"}, ] [package.dependencies] @@ -1480,7 +1480,6 @@ anyio = "*" certifi = "*" httpcore = "==1.*" idna = "*" -sniffio = "*" [package.extras] brotli = ["brotli", "brotlicffi"] @@ -1491,13 +1490,13 @@ zstd = ["zstandard (>=0.18.0)"] [[package]] name = "huggingface-hub" -version = "0.26.2" +version = "0.26.3" description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" optional = false python-versions = ">=3.8.0" files = [ - {file = "huggingface_hub-0.26.2-py3-none-any.whl", hash = "sha256:98c2a5a8e786c7b2cb6fdeb2740893cba4d53e312572ed3d8afafda65b128c46"}, - {file = "huggingface_hub-0.26.2.tar.gz", hash = "sha256:b100d853465d965733964d123939ba287da60a547087783ddff8a323f340332b"}, + {file = "huggingface_hub-0.26.3-py3-none-any.whl", hash = "sha256:e66aa99e569c2d5419240a9e553ad07245a5b1300350bfbc5a4945cf7432991b"}, + {file = "huggingface_hub-0.26.3.tar.gz", hash = "sha256:90e1fe62ffc26757a073aaad618422b899ccf9447c2bba8c902a90bef5b42e1d"}, ] [package.dependencies] @@ -1567,13 +1566,13 @@ all = ["flake8 (>=7.1.1)", "mypy (>=1.11.2)", "pytest (>=8.3.2)", "ruff (>=0.6.2 [[package]] name = "imageio" -version = "2.36.0" +version = "2.36.1" description = "Library for reading and writing a wide range of image, video, scientific, and volumetric data formats." optional = false python-versions = ">=3.9" files = [ - {file = "imageio-2.36.0-py3-none-any.whl", hash = "sha256:471f1eda55618ee44a3c9960911c35e647d9284c68f077e868df633398f137f0"}, - {file = "imageio-2.36.0.tar.gz", hash = "sha256:1c8f294db862c256e9562354d65aa54725b8dafed7f10f02bb3ec20ec1678850"}, + {file = "imageio-2.36.1-py3-none-any.whl", hash = "sha256:20abd2cae58e55ca1af8a8dcf43293336a59adf0391f1917bf8518633cfc2cdf"}, + {file = "imageio-2.36.1.tar.gz", hash = "sha256:e4e1d231f47f9a9e16100b0f7ce1a86e8856fb4d1c0fa2c4365a316f1746be62"}, ] [package.dependencies] @@ -2148,13 +2147,13 @@ langchain-core = ">=0.2.38,<0.3.0" [[package]] name = "langsmith" -version = "0.1.146" +version = "0.1.147" description = "Client library to connect to the LangSmith LLM Tracing and Evaluation Platform." optional = false python-versions = "<4.0,>=3.8.1" files = [ - {file = "langsmith-0.1.146-py3-none-any.whl", hash = "sha256:9d062222f1a32c9b047dab0149b24958f988989cd8d4a5f9139ff959a51e59d8"}, - {file = "langsmith-0.1.146.tar.gz", hash = "sha256:ead8b0b9d5b6cd3ac42937ec48bdf09d4afe7ca1bba22dc05eb65591a18106f8"}, + {file = "langsmith-0.1.147-py3-none-any.whl", hash = "sha256:7166fc23b965ccf839d64945a78e9f1157757add228b086141eb03a60d699a15"}, + {file = "langsmith-0.1.147.tar.gz", hash = "sha256:2e933220318a4e73034657103b3b1a3a6109cc5db3566a7e8e03be8d6d7def7a"}, ] [package.dependencies] @@ -2167,6 +2166,9 @@ pydantic = [ requests = ">=2,<3" requests-toolbelt = ">=1.0.0,<2.0.0" +[package.extras] +langsmith-pyo3 = ["langsmith-pyo3 (>=0.1.0rc2,<0.2.0)"] + [[package]] name = "lazy-loader" version = "0.4" @@ -2951,13 +2953,13 @@ files = [ [[package]] name = "nbclient" -version = "0.10.0" +version = "0.10.1" description = "A client library for executing notebooks. Formerly nbconvert's ExecutePreprocessor." optional = false python-versions = ">=3.8.0" files = [ - {file = "nbclient-0.10.0-py3-none-any.whl", hash = "sha256:f13e3529332a1f1f81d82a53210322476a168bb7090a0289c795fe9cc11c9d3f"}, - {file = "nbclient-0.10.0.tar.gz", hash = "sha256:4b3f1b7dba531e498449c4db4f53da339c91d449dc11e9af3a43b4eb5c5abb09"}, + {file = "nbclient-0.10.1-py3-none-any.whl", hash = "sha256:949019b9240d66897e442888cfb618f69ef23dc71c01cb5fced8499c2cfc084d"}, + {file = "nbclient-0.10.1.tar.gz", hash = "sha256:3e93e348ab27e712acd46fccd809139e356eb9a31aab641d1a7991a6eb4e6f68"}, ] [package.dependencies] @@ -2968,7 +2970,7 @@ traitlets = ">=5.4" [package.extras] dev = ["pre-commit"] -docs = ["autodoc-traits", "mock", "moto", "myst-parser", "nbclient[test]", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling"] +docs = ["autodoc-traits", "flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "mock", "moto", "myst-parser", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "sphinx (>=1.7)", "sphinx-book-theme", "sphinxcontrib-spelling", "testpath", "xmltodict"] test = ["flaky", "ipykernel (>=6.19.3)", "ipython", "ipywidgets", "nbconvert (>=7.0.0)", "pytest (>=7.0,<8)", "pytest-asyncio", "pytest-cov (>=4.0)", "testpath", "xmltodict"] [[package]] @@ -3081,27 +3083,34 @@ test = ["pytest (>=7.2)", "pytest-cov (>=4.0)"] [[package]] name = "nh3" -version = "0.2.18" +version = "0.2.19" description = "Python bindings to the ammonia HTML sanitization library." optional = false python-versions = "*" files = [ - {file = "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:14c5a72e9fe82aea5fe3072116ad4661af5cf8e8ff8fc5ad3450f123e4925e86"}, - {file = "nh3-0.2.18-cp37-abi3-macosx_10_12_x86_64.whl", hash = "sha256:7b7c2a3c9eb1a827d42539aa64091640bd275b81e097cd1d8d82ef91ffa2e811"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42c64511469005058cd17cc1537578eac40ae9f7200bedcfd1fc1a05f4f8c200"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0411beb0589eacb6734f28d5497ca2ed379eafab8ad8c84b31bb5c34072b7164"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:5f36b271dae35c465ef5e9090e1fdaba4a60a56f0bb0ba03e0932a66f28b9189"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:34c03fa78e328c691f982b7c03d4423bdfd7da69cd707fe572f544cf74ac23ad"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:19aaba96e0f795bd0a6c56291495ff59364f4300d4a39b29a0abc9cb3774a84b"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de3ceed6e661954871d6cd78b410213bdcb136f79aafe22aa7182e028b8c7307"}, - {file = "nh3-0.2.18-cp37-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6955369e4d9f48f41e3f238a9e60f9410645db7e07435e62c6a9ea6135a4907f"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:f0eca9ca8628dbb4e916ae2491d72957fdd35f7a5d326b7032a345f111ac07fe"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:3a157ab149e591bb638a55c8c6bcb8cdb559c8b12c13a8affaba6cedfe51713a"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_i686.whl", hash = "sha256:c8b3a1cebcba9b3669ed1a84cc65bf005728d2f0bc1ed2a6594a992e817f3a50"}, - {file = "nh3-0.2.18-cp37-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:36c95d4b70530b320b365659bb5034341316e6a9b30f0b25fa9c9eff4c27a204"}, - {file = "nh3-0.2.18-cp37-abi3-win32.whl", hash = "sha256:a7f1b5b2c15866f2db413a3649a8fe4fd7b428ae58be2c0f6bca5eefd53ca2be"}, - {file = "nh3-0.2.18-cp37-abi3-win_amd64.whl", hash = "sha256:8ce0f819d2f1933953fca255db2471ad58184a60508f03e6285e5114b6254844"}, - {file = "nh3-0.2.18.tar.gz", hash = "sha256:94a166927e53972a9698af9542ace4e38b9de50c34352b962f4d9a7d4c927af4"}, + {file = "nh3-0.2.19-cp313-cp313t-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:ec9c8bf86e397cb88c560361f60fdce478b5edb8b93f04ead419b72fbe937ea6"}, + {file = "nh3-0.2.19-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d0adf00e2b2026fa10a42537b60d161e516f206781c7515e4e97e09f72a8c5d0"}, + {file = "nh3-0.2.19-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3805161c4e12088bd74752ba69630e915bc30fe666034f47217a2f16b16efc37"}, + {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:e3dedd7858a21312f7675841529941035a2ac91057db13402c8fe907aa19205a"}, + {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_armv7l.whl", hash = "sha256:0b6820fc64f2ff7ef3e7253a093c946a87865c877b3889149a6d21d322ed8dbd"}, + {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:833b3b5f1783ce95834a13030300cea00cbdfd64ea29260d01af9c4821da0aa9"}, + {file = "nh3-0.2.19-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:5d4f5e2189861b352b73acb803b5f4bb409c2f36275d22717e27d4e0c217ae55"}, + {file = "nh3-0.2.19-cp313-cp313t-win32.whl", hash = "sha256:2b926f179eb4bce72b651bfdf76f8aa05d167b2b72bc2f3657fd319f40232adc"}, + {file = "nh3-0.2.19-cp313-cp313t-win_amd64.whl", hash = "sha256:ac536a4b5c073fdadd8f5f4889adabe1cbdae55305366fb870723c96ca7f49c3"}, + {file = "nh3-0.2.19-cp38-abi3-macosx_10_12_x86_64.macosx_11_0_arm64.macosx_10_12_universal2.whl", hash = "sha256:c2e3f0d18cc101132fe10ab7ef5c4f41411297e639e23b64b5e888ccaad63f41"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11270b16c1b012677e3e2dd166c1aa273388776bf99a3e3677179db5097ee16a"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fc483dd8d20f8f8c010783a25a84db3bebeadced92d24d34b40d687f8043ac69"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_ppc64.manylinux2014_ppc64.whl", hash = "sha256:d53a4577b6123ca1d7e8483fad3e13cb7eda28913d516bd0a648c1a473aa21a9"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:fdb20740d24ab9f2a1341458a00a11205294e97e905de060eeab1ceca020c09c"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8325d51e47cb5b11f649d55e626d56c76041ba508cd59e0cb1cf687cc7612f1"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b8eb7affc590e542fa7981ef508cd1644f62176bcd10d4429890fc629b47f0bc"}, + {file = "nh3-0.2.19-cp38-abi3-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2eb021804e9df1761abeb844bb86648d77aa118a663c82f50ea04110d87ed707"}, + {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:a7b928862daddb29805a1010a0282f77f4b8b238a37b5f76bc6c0d16d930fd22"}, + {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:ed06ed78f6b69d57463b46a04f68f270605301e69d80756a8adf7519002de57d"}, + {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_i686.whl", hash = "sha256:df8eac98fec80bd6f5fd0ae27a65de14f1e1a65a76d8e2237eb695f9cd1121d9"}, + {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00810cd5275f5c3f44b9eb0e521d1a841ee2f8023622de39ffc7d88bd533d8e0"}, + {file = "nh3-0.2.19-cp38-abi3-win32.whl", hash = "sha256:7e98621856b0a911c21faa5eef8f8ea3e691526c2433f9afc2be713cb6fbdb48"}, + {file = "nh3-0.2.19-cp38-abi3-win_amd64.whl", hash = "sha256:75c7cafb840f24430b009f7368945cb5ca88b2b54bb384ebfba495f16bc9c121"}, ] [[package]] @@ -4257,22 +4266,22 @@ files = [ [[package]] name = "protobuf" -version = "5.28.3" +version = "5.29.0" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.28.3-cp310-abi3-win32.whl", hash = "sha256:0c4eec6f987338617072592b97943fdbe30d019c56126493111cf24344c1cc24"}, - {file = "protobuf-5.28.3-cp310-abi3-win_amd64.whl", hash = "sha256:91fba8f445723fcf400fdbe9ca796b19d3b1242cd873907979b9ed71e4afe868"}, - {file = "protobuf-5.28.3-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:a3f6857551e53ce35e60b403b8a27b0295f7d6eb63d10484f12bc6879c715687"}, - {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:3fa2de6b8b29d12c61911505d893afe7320ce7ccba4df913e2971461fa36d584"}, - {file = "protobuf-5.28.3-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:712319fbdddb46f21abb66cd33cb9e491a5763b2febd8f228251add221981135"}, - {file = "protobuf-5.28.3-cp38-cp38-win32.whl", hash = "sha256:3e6101d095dfd119513cde7259aa703d16c6bbdfae2554dfe5cfdbe94e32d548"}, - {file = "protobuf-5.28.3-cp38-cp38-win_amd64.whl", hash = "sha256:27b246b3723692bf1068d5734ddaf2fccc2cdd6e0c9b47fe099244d80200593b"}, - {file = "protobuf-5.28.3-cp39-cp39-win32.whl", hash = "sha256:135658402f71bbd49500322c0f736145731b16fc79dc8f367ab544a17eab4535"}, - {file = "protobuf-5.28.3-cp39-cp39-win_amd64.whl", hash = "sha256:70585a70fc2dd4818c51287ceef5bdba6387f88a578c86d47bb34669b5552c36"}, - {file = "protobuf-5.28.3-py3-none-any.whl", hash = "sha256:cee1757663fa32a1ee673434fcf3bf24dd54763c79690201208bafec62f19eed"}, - {file = "protobuf-5.28.3.tar.gz", hash = "sha256:64badbc49180a5e401f373f9ce7ab1d18b63f7dd4a9cdc43c92b9f0b481cef7b"}, + {file = "protobuf-5.29.0-cp310-abi3-win32.whl", hash = "sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2"}, + {file = "protobuf-5.29.0-cp310-abi3-win_amd64.whl", hash = "sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069"}, + {file = "protobuf-5.29.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43"}, + {file = "protobuf-5.29.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1"}, + {file = "protobuf-5.29.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20"}, + {file = "protobuf-5.29.0-cp38-cp38-win32.whl", hash = "sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a"}, + {file = "protobuf-5.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86"}, + {file = "protobuf-5.29.0-cp39-cp39-win32.whl", hash = "sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac"}, + {file = "protobuf-5.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368"}, + {file = "protobuf-5.29.0-py3-none-any.whl", hash = "sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f"}, + {file = "protobuf-5.29.0.tar.gz", hash = "sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001"}, ] [[package]] @@ -4332,51 +4341,57 @@ tests = ["pytest"] [[package]] name = "pyarrow" -version = "16.1.0" +version = "18.1.0" description = "Python library for Apache Arrow" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "pyarrow-16.1.0-cp310-cp310-macosx_10_15_x86_64.whl", hash = "sha256:17e23b9a65a70cc733d8b738baa6ad3722298fa0c81d88f63ff94bf25eaa77b9"}, - {file = "pyarrow-16.1.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4740cc41e2ba5d641071d0ab5e9ef9b5e6e8c7611351a5cb7c1d175eaf43674a"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:98100e0268d04e0eec47b73f20b39c45b4006f3c4233719c3848aa27a03c1aef"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f68f409e7b283c085f2da014f9ef81e885d90dcd733bd648cfba3ef265961848"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:a8914cd176f448e09746037b0c6b3a9d7688cef451ec5735094055116857580c"}, - {file = "pyarrow-16.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:48be160782c0556156d91adbdd5a4a7e719f8d407cb46ae3bb4eaee09b3111bd"}, - {file = "pyarrow-16.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9cf389d444b0f41d9fe1444b70650fea31e9d52cfcb5f818b7888b91b586efff"}, - {file = "pyarrow-16.1.0-cp311-cp311-macosx_10_15_x86_64.whl", hash = "sha256:d0ebea336b535b37eee9eee31761813086d33ed06de9ab6fc6aaa0bace7b250c"}, - {file = "pyarrow-16.1.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:2e73cfc4a99e796727919c5541c65bb88b973377501e39b9842ea71401ca6c1c"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bf9251264247ecfe93e5f5a0cd43b8ae834f1e61d1abca22da55b20c788417f6"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddf5aace92d520d3d2a20031d8b0ec27b4395cab9f74e07cc95edf42a5cc0147"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:25233642583bf658f629eb230b9bb79d9af4d9f9229890b3c878699c82f7d11e"}, - {file = "pyarrow-16.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:a33a64576fddfbec0a44112eaf844c20853647ca833e9a647bfae0582b2ff94b"}, - {file = "pyarrow-16.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:185d121b50836379fe012753cf15c4ba9638bda9645183ab36246923875f8d1b"}, - {file = "pyarrow-16.1.0-cp312-cp312-macosx_10_15_x86_64.whl", hash = "sha256:2e51ca1d6ed7f2e9d5c3c83decf27b0d17bb207a7dea986e8dc3e24f80ff7d6f"}, - {file = "pyarrow-16.1.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:06ebccb6f8cb7357de85f60d5da50e83507954af617d7b05f48af1621d331c9a"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b04707f1979815f5e49824ce52d1dceb46e2f12909a48a6a753fe7cafbc44a0c"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0d32000693deff8dc5df444b032b5985a48592c0697cb6e3071a5d59888714e2"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:8785bb10d5d6fd5e15d718ee1d1f914fe768bf8b4d1e5e9bf253de8a26cb1628"}, - {file = "pyarrow-16.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:e1369af39587b794873b8a307cc6623a3b1194e69399af0efd05bb202195a5a7"}, - {file = "pyarrow-16.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:febde33305f1498f6df85e8020bca496d0e9ebf2093bab9e0f65e2b4ae2b3444"}, - {file = "pyarrow-16.1.0-cp38-cp38-macosx_10_15_x86_64.whl", hash = "sha256:b5f5705ab977947a43ac83b52ade3b881eb6e95fcc02d76f501d549a210ba77f"}, - {file = "pyarrow-16.1.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:0d27bf89dfc2576f6206e9cd6cf7a107c9c06dc13d53bbc25b0bd4556f19cf5f"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d07de3ee730647a600037bc1d7b7994067ed64d0eba797ac74b2bc77384f4c2"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fbef391b63f708e103df99fbaa3acf9f671d77a183a07546ba2f2c297b361e83"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_aarch64.whl", hash = "sha256:19741c4dbbbc986d38856ee7ddfdd6a00fc3b0fc2d928795b95410d38bb97d15"}, - {file = "pyarrow-16.1.0-cp38-cp38-manylinux_2_28_x86_64.whl", hash = "sha256:f2c5fb249caa17b94e2b9278b36a05ce03d3180e6da0c4c3b3ce5b2788f30eed"}, - {file = "pyarrow-16.1.0-cp38-cp38-win_amd64.whl", hash = "sha256:e6b6d3cd35fbb93b70ade1336022cc1147b95ec6af7d36906ca7fe432eb09710"}, - {file = "pyarrow-16.1.0-cp39-cp39-macosx_10_15_x86_64.whl", hash = "sha256:18da9b76a36a954665ccca8aa6bd9f46c1145f79c0bb8f4f244f5f8e799bca55"}, - {file = "pyarrow-16.1.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:99f7549779b6e434467d2aa43ab2b7224dd9e41bdde486020bae198978c9e05e"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f07fdffe4fd5b15f5ec15c8b64584868d063bc22b86b46c9695624ca3505b7b4"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ddfe389a08ea374972bd4065d5f25d14e36b43ebc22fc75f7b951f24378bf0b5"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:3b20bd67c94b3a2ea0a749d2a5712fc845a69cb5d52e78e6449bbd295611f3aa"}, - {file = "pyarrow-16.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:ba8ac20693c0bb0bf4b238751d4409e62852004a8cf031c73b0e0962b03e45e3"}, - {file = "pyarrow-16.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:31a1851751433d89a986616015841977e0a188662fcffd1a5677453f1df2de0a"}, - {file = "pyarrow-16.1.0.tar.gz", hash = "sha256:15fbb22ea96d11f0b5768504a3f961edab25eaf4197c341720c4a387f6c60315"}, + {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_arm64.whl", hash = "sha256:e21488d5cfd3d8b500b3238a6c4b075efabc18f0f6d80b29239737ebd69caa6c"}, + {file = "pyarrow-18.1.0-cp310-cp310-macosx_12_0_x86_64.whl", hash = "sha256:b516dad76f258a702f7ca0250885fc93d1fa5ac13ad51258e39d402bd9e2e1e4"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f443122c8e31f4c9199cb23dca29ab9427cef990f283f80fe15b8e124bcc49b"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0a03da7f2758645d17b7b4f83c8bffeae5bbb7f974523fe901f36288d2eab71"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_aarch64.whl", hash = "sha256:ba17845efe3aa358ec266cf9cc2800fa73038211fb27968bfa88acd09261a470"}, + {file = "pyarrow-18.1.0-cp310-cp310-manylinux_2_28_x86_64.whl", hash = "sha256:3c35813c11a059056a22a3bef520461310f2f7eea5c8a11ef9de7062a23f8d56"}, + {file = "pyarrow-18.1.0-cp310-cp310-win_amd64.whl", hash = "sha256:9736ba3c85129d72aefa21b4f3bd715bc4190fe4426715abfff90481e7d00812"}, + {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_arm64.whl", hash = "sha256:eaeabf638408de2772ce3d7793b2668d4bb93807deed1725413b70e3156a7854"}, + {file = "pyarrow-18.1.0-cp311-cp311-macosx_12_0_x86_64.whl", hash = "sha256:3b2e2239339c538f3464308fd345113f886ad031ef8266c6f004d49769bb074c"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f39a2e0ed32a0970e4e46c262753417a60c43a3246972cfc2d3eb85aedd01b21"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e31e9417ba9c42627574bdbfeada7217ad8a4cbbe45b9d6bdd4b62abbca4c6f6"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_aarch64.whl", hash = "sha256:01c034b576ce0eef554f7c3d8c341714954be9b3f5d5bc7117006b85fcf302fe"}, + {file = "pyarrow-18.1.0-cp311-cp311-manylinux_2_28_x86_64.whl", hash = "sha256:f266a2c0fc31995a06ebd30bcfdb7f615d7278035ec5b1cd71c48d56daaf30b0"}, + {file = "pyarrow-18.1.0-cp311-cp311-win_amd64.whl", hash = "sha256:d4f13eee18433f99adefaeb7e01d83b59f73360c231d4782d9ddfaf1c3fbde0a"}, + {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_arm64.whl", hash = "sha256:9f3a76670b263dc41d0ae877f09124ab96ce10e4e48f3e3e4257273cee61ad0d"}, + {file = "pyarrow-18.1.0-cp312-cp312-macosx_12_0_x86_64.whl", hash = "sha256:da31fbca07c435be88a0c321402c4e31a2ba61593ec7473630769de8346b54ee"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:543ad8459bc438efc46d29a759e1079436290bd583141384c6f7a1068ed6f992"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0743e503c55be0fdb5c08e7d44853da27f19dc854531c0570f9f394ec9671d54"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_aarch64.whl", hash = "sha256:d4b3d2a34780645bed6414e22dda55a92e0fcd1b8a637fba86800ad737057e33"}, + {file = "pyarrow-18.1.0-cp312-cp312-manylinux_2_28_x86_64.whl", hash = "sha256:c52f81aa6f6575058d8e2c782bf79d4f9fdc89887f16825ec3a66607a5dd8e30"}, + {file = "pyarrow-18.1.0-cp312-cp312-win_amd64.whl", hash = "sha256:0ad4892617e1a6c7a551cfc827e072a633eaff758fa09f21c4ee548c30bcaf99"}, + {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:84e314d22231357d473eabec709d0ba285fa706a72377f9cc8e1cb3c8013813b"}, + {file = "pyarrow-18.1.0-cp313-cp313-macosx_12_0_x86_64.whl", hash = "sha256:f591704ac05dfd0477bb8f8e0bd4b5dc52c1cadf50503858dce3a15db6e46ff2"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:acb7564204d3c40babf93a05624fc6a8ec1ab1def295c363afc40b0c9e66c191"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:74de649d1d2ccb778f7c3afff6085bd5092aed4c23df9feeb45dd6b16f3811aa"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_aarch64.whl", hash = "sha256:f96bd502cb11abb08efea6dab09c003305161cb6c9eafd432e35e76e7fa9b90c"}, + {file = "pyarrow-18.1.0-cp313-cp313-manylinux_2_28_x86_64.whl", hash = "sha256:36ac22d7782554754a3b50201b607d553a8d71b78cdf03b33c1125be4b52397c"}, + {file = "pyarrow-18.1.0-cp313-cp313-win_amd64.whl", hash = "sha256:25dbacab8c5952df0ca6ca0af28f50d45bd31c1ff6fcf79e2d120b4a65ee7181"}, + {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_arm64.whl", hash = "sha256:6a276190309aba7bc9d5bd2933230458b3521a4317acfefe69a354f2fe59f2bc"}, + {file = "pyarrow-18.1.0-cp313-cp313t-macosx_12_0_x86_64.whl", hash = "sha256:ad514dbfcffe30124ce655d72771ae070f30bf850b48bc4d9d3b25993ee0e386"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:aebc13a11ed3032d8dd6e7171eb6e86d40d67a5639d96c35142bd568b9299324"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d6cf5c05f3cee251d80e98726b5c7cc9f21bab9e9783673bac58e6dfab57ecc8"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_aarch64.whl", hash = "sha256:11b676cd410cf162d3f6a70b43fb9e1e40affbc542a1e9ed3681895f2962d3d9"}, + {file = "pyarrow-18.1.0-cp313-cp313t-manylinux_2_28_x86_64.whl", hash = "sha256:b76130d835261b38f14fc41fdfb39ad8d672afb84c447126b84d5472244cfaba"}, + {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:0b331e477e40f07238adc7ba7469c36b908f07c89b95dd4bd3a0ec84a3d1e21e"}, + {file = "pyarrow-18.1.0-cp39-cp39-macosx_12_0_x86_64.whl", hash = "sha256:2c4dd0c9010a25ba03e198fe743b1cc03cd33c08190afff371749c52ccbbaf76"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4f97b31b4c4e21ff58c6f330235ff893cc81e23da081b1a4b1c982075e0ed4e9"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a4813cb8ecf1809871fd2d64a8eff740a1bd3691bbe55f01a3cf6c5ec869754"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_aarch64.whl", hash = "sha256:05a5636ec3eb5cc2a36c6edb534a38ef57b2ab127292a716d00eabb887835f1e"}, + {file = "pyarrow-18.1.0-cp39-cp39-manylinux_2_28_x86_64.whl", hash = "sha256:73eeed32e724ea3568bb06161cad5fa7751e45bc2228e33dcb10c614044165c7"}, + {file = "pyarrow-18.1.0-cp39-cp39-win_amd64.whl", hash = "sha256:a1880dd6772b685e803011a6b43a230c23b566859a6e0c9a276c1e0faf4f4052"}, + {file = "pyarrow-18.1.0.tar.gz", hash = "sha256:9386d3ca9c145b5539a1cfc75df07757dff870168c959b473a0bccbc3abc8c73"}, ] -[package.dependencies] -numpy = ">=1.16.6" +[package.extras] +test = ["cffi", "hypothesis", "pandas", "pytest", "pytz"] [[package]] name = "pyclipper" @@ -6356,26 +6371,123 @@ files = [ [[package]] name = "tokenizers" -version = "0.20.4" +version = "0.20.3" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.4-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:25f59ebc5b79e7bbafe86bfec62696468016627157d8a9ceba5092486796a156"}, - {file = "tokenizers-0.20.4-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f41df992797ad0ff9472e8a2c7a3ef7178667935d984639b73da7d19b33ea4e2"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7786004e180fab72e6e873e982ccd18b3cfa31521d397b6c024cc19175abf91b"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:075635cd7e6936cc4b3a13901c1a05690d5b533ce3d0f035dee21117dd4f04ae"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:aa392bae7f0a36e4c97ad43100390ad84f2a1bfff6742604774210f7d7a4fa13"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eee647ccba9cbd36b5ec4e8e73d25dbd586ec06de7a43ff83a3dad9fec466a29"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:735ffc9bba65d20f8ab5f82dfbab262bb066afc7dee3684c5e5435e7a5da445d"}, - {file = "tokenizers-0.20.4-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:05c2bab579c1f31292b48bb79b6334b5346c1ec87dac81089e6098b8a20b2fd4"}, - {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:3e960ad5c467a95e5665e518151ed9024e7aa111d2c54ff1938162cc7c2b8959"}, - {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:e59a405459ed31b73426b364752c2e7c73f4a94210a63fd7acd161a774af7bd2"}, - {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:84bf8b4a7bbf1c6bb78775ae309a5c69d08dadf7b88125d6d19ccb4738a87350"}, - {file = "tokenizers-0.20.4-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:a6d392a20ca70692aaba8a636677b57f6c67655879773ba2b6be8cb4a19ce6b8"}, - {file = "tokenizers-0.20.4-cp39-abi3-win32.whl", hash = "sha256:60ea37c885a9bb8efa53b7542ea83561cd00eb3ffb47a77f5ae622d9f7f66ffe"}, - {file = "tokenizers-0.20.4-cp39-abi3-win_amd64.whl", hash = "sha256:6cba92b87969ddf5a7e2f2293577c30129d8c22c6f68e8c626d3e76b8d52412c"}, - {file = "tokenizers-0.20.4.tar.gz", hash = "sha256:db50ac15e92981227f499268541306824f49e97dbeec05d118ebdc7c2d22322c"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, + {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, + {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, + {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, + {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, + {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, + {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, + {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, + {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, + {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, + {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, + {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, + {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, + {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, + {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, + {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, + {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, + {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, + {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, + {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, + {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, + {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, + {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, + {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, + {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, + {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, + {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, + {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, + {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, + {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, + {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, + {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, + {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, + {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, + {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, + {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, + {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, + {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, + {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, + {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, + {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, ] [package.dependencies] @@ -6388,13 +6500,43 @@ testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] [[package]] name = "tomli" -version = "2.1.0" +version = "2.2.1" description = "A lil' TOML parser" optional = false python-versions = ">=3.8" files = [ - {file = "tomli-2.1.0-py3-none-any.whl", hash = "sha256:a5c57c3d1c56f5ccdf89f6523458f60ef716e210fc47c4cfb188c5ba473e0391"}, - {file = "tomli-2.1.0.tar.gz", hash = "sha256:3f646cae2aec94e17d04973e4249548320197cfabdf130015d023de4b74d8ab8"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:678e4fa69e4575eb77d103de3df8a895e1591b48e740211bd1067378c69e8249"}, + {file = "tomli-2.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:023aa114dd824ade0100497eb2318602af309e5a55595f76b626d6d9f3b7b0a6"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ece47d672db52ac607a3d9599a9d48dcb2f2f735c6c2d1f34130085bb12b112a"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6972ca9c9cc9f0acaa56a8ca1ff51e7af152a9f87fb64623e31d5c83700080ee"}, + {file = "tomli-2.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c954d2250168d28797dd4e3ac5cf812a406cd5a92674ee4c8f123c889786aa8e"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:8dd28b3e155b80f4d54beb40a441d366adcfe740969820caf156c019fb5c7ec4"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e59e304978767a54663af13c07b3d1af22ddee3bb2fb0618ca1593e4f593a106"}, + {file = "tomli-2.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:33580bccab0338d00994d7f16f4c4ec25b776af3ffaac1ed74e0b3fc95e885a8"}, + {file = "tomli-2.2.1-cp311-cp311-win32.whl", hash = "sha256:465af0e0875402f1d226519c9904f37254b3045fc5084697cefb9bdde1ff99ff"}, + {file = "tomli-2.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:2d0f2fdd22b02c6d81637a3c95f8cd77f995846af7414c5c4b8d0545afa1bc4b"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:4a8f6e44de52d5e6c657c9fe83b562f5f4256d8ebbfe4ff922c495620a7f6cea"}, + {file = "tomli-2.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8d57ca8095a641b8237d5b079147646153d22552f1c637fd3ba7f4b0b29167a8"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4e340144ad7ae1533cb897d406382b4b6fede8890a03738ff1683af800d54192"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:db2b95f9de79181805df90bedc5a5ab4c165e6ec3fe99f970d0e302f384ad222"}, + {file = "tomli-2.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:40741994320b232529c802f8bc86da4e1aa9f413db394617b9a256ae0f9a7f77"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:400e720fe168c0f8521520190686ef8ef033fb19fc493da09779e592861b78c6"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:02abe224de6ae62c19f090f68da4e27b10af2b93213d36cf44e6e1c5abd19fdd"}, + {file = "tomli-2.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b82ebccc8c8a36f2094e969560a1b836758481f3dc360ce9a3277c65f374285e"}, + {file = "tomli-2.2.1-cp312-cp312-win32.whl", hash = "sha256:889f80ef92701b9dbb224e49ec87c645ce5df3fa2cc548664eb8a25e03127a98"}, + {file = "tomli-2.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:7fc04e92e1d624a4a63c76474610238576942d6b8950a2d7f908a340494e67e4"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:f4039b9cbc3048b2416cc57ab3bda989a6fcf9b36cf8937f01a6e731b64f80d7"}, + {file = "tomli-2.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:286f0ca2ffeeb5b9bd4fcc8d6c330534323ec51b2f52da063b11c502da16f30c"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a92ef1a44547e894e2a17d24e7557a5e85a9e1d0048b0b5e7541f76c5032cb13"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9316dc65bed1684c9a98ee68759ceaed29d229e985297003e494aa825ebb0281"}, + {file = "tomli-2.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e85e99945e688e32d5a35c1ff38ed0b3f41f43fad8df0bdf79f72b2ba7bc5272"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:ac065718db92ca818f8d6141b5f66369833d4a80a9d74435a268c52bdfa73140"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:d920f33822747519673ee656a4b6ac33e382eca9d331c87770faa3eef562aeb2"}, + {file = "tomli-2.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a198f10c4d1b1375d7687bc25294306e551bf1abfa4eace6650070a5c1ae2744"}, + {file = "tomli-2.2.1-cp313-cp313-win32.whl", hash = "sha256:d3f5614314d758649ab2ab3a62d4f2004c825922f9e370b29416484086b264ec"}, + {file = "tomli-2.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:a38aa0308e754b0e3c67e344754dff64999ff9b513e691d0e786265c93583c69"}, + {file = "tomli-2.2.1-py3-none-any.whl", hash = "sha256:cb55c73c5f4408779d0cf3eef9f762b9c9f147a77de7b258bef0a5628adc85cc"}, + {file = "tomli-2.2.1.tar.gz", hash = "sha256:cd45e1dc79c835ce60f7404ec8119f2eb06d38b1deba146f07ced3bbc44505ff"}, ] [[package]] @@ -7415,4 +7557,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "c08324f73fb809466ad3494605a6745ec6c9f38b60e7b1f516f3f93a29534ca4" +content-hash = "3be886856c0f11033cfb7cb8bc30e5d59d7bb9804df9da9572b3cfbc2f6c3c56" diff --git a/pyproject.toml b/pyproject.toml index 6ae41b8f..bbbb35c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -40,7 +40,6 @@ docling-parse = "^2.0.5" certifi = ">=2024.7.4" rtree = "^1.3.0" scipy = "^1.6.0" -pyarrow = "^16.1.0" typer = "^0.12.5" python-docx = "^1.1.2" python-pptx = "^1.0.2" From dd8de462676993b81926610fd573d51d3272cbaf Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Fri, 29 Nov 2024 13:25:58 +0100 Subject: [PATCH 23/40] fix(cli): expose debug options (#467) Signed-off-by: Michele Dolfi --- docling/cli/main.py | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/docling/cli/main.py b/docling/cli/main.py index d6f51b74..ac8b19aa 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -32,6 +32,7 @@ from docling.datamodel.pipeline_options import ( TesseractCliOcrOptions, TesseractOcrOptions, ) +from docling.datamodel.settings import settings from docling.document_converter import DocumentConverter, FormatOption, PdfFormatOption warnings.filterwarnings(action="ignore", category=UserWarning, module="pydantic|torch") @@ -212,6 +213,24 @@ def convert( help="Set the verbosity level. -v for info logging, -vv for debug logging.", ), ] = 0, + debug_visualize_cells: Annotated[ + bool, + typer.Option(..., help="Enable debug output which visualizes the PDF cells"), + ] = False, + debug_visualize_ocr: Annotated[ + bool, + typer.Option(..., help="Enable debug output which visualizes the OCR cells"), + ] = False, + debug_visualize_layout: Annotated[ + bool, + typer.Option( + ..., help="Enable debug output which visualizes the layour clusters" + ), + ] = False, + debug_visualize_tables: Annotated[ + bool, + typer.Option(..., help="Enable debug output which visualizes the table cells"), + ] = False, version: Annotated[ Optional[bool], typer.Option( @@ -229,6 +248,11 @@ def convert( elif verbose == 2: logging.basicConfig(level=logging.DEBUG) + settings.debug.visualize_cells = debug_visualize_cells + settings.debug.visualize_layout = debug_visualize_layout + settings.debug.visualize_tables = debug_visualize_tables + settings.debug.visualize_ocr = debug_visualize_ocr + if from_formats is None: from_formats = [e for e in InputFormat] From cc46c938b66b2d24f601acc9646782dc83326e1f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Fri, 29 Nov 2024 13:04:48 +0000 Subject: [PATCH 24/40] chore: bump version to 2.8.1 [skip ci] --- CHANGELOG.md | 11 +++++++++++ pyproject.toml | 2 +- 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5e0d4034..c77d4ab3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,14 @@ +## [v2.8.1](https://github.com/DS4SD/docling/releases/tag/v2.8.1) - 2024-11-29 + +### Fix + +* **cli:** Expose debug options ([#467](https://github.com/DS4SD/docling/issues/467)) ([`dd8de46`](https://github.com/DS4SD/docling/commit/dd8de462676993b81926610fd573d51d3272cbaf)) +* Remove unused deps ([#466](https://github.com/DS4SD/docling/issues/466)) ([`af63818`](https://github.com/DS4SD/docling/commit/af63818df5636c4cbe77c0a01e6dcc0d47c4bfdb)) + +### Documentation + +* Extend integration docs & README ([#456](https://github.com/DS4SD/docling/issues/456)) ([`84c46fd`](https://github.com/DS4SD/docling/commit/84c46fdeb344502edf9647c610c4828ab0ffb9dd)) + ## [v2.8.0](https://github.com/DS4SD/docling/releases/tag/v2.8.0) - 2024-11-27 ### Feature diff --git a/pyproject.toml b/pyproject.toml index bbbb35c8..81cffb10 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.8.0" # DO NOT EDIT, updated automatically +version = "2.8.1" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 8ccb3c6db69318789af7deec26cfa2a3fd71302e Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Fri, 29 Nov 2024 22:34:56 +0100 Subject: [PATCH 25/40] docs: introduce faq section (#468) Signed-off-by: Michele Dolfi --- docs/faq.md | 134 ++++++++++++++++++++++++++++++++++++++++++++++++++++ mkdocs.yml | 1 + 2 files changed, 135 insertions(+) create mode 100644 docs/faq.md diff --git a/docs/faq.md b/docs/faq.md new file mode 100644 index 00000000..a38f5544 --- /dev/null +++ b/docs/faq.md @@ -0,0 +1,134 @@ +# FAQ + +This is a collection of FAQ collected from the user questions on . + + +### Python 3.13 support + +Full support for Python 3.13 is currently waiting for [pytorch](https://github.com/pytorch/pytorch). + +At the moment, no release has full support, but nightly builds are available. Docling was tested on Python 3.13 with the following steps: + +```sh +# Create a python 3.13 virtualenv +python3.13 -m venv venv +source ./venv/bin/activate + +# Install torch nightly builds, see https://pytorch.org/ +pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu + +# Install docling +pip3 install docling + +# Run docling +docling --no-ocr https://arxiv.org/pdf/2408.09869 +``` + +_Note: we are disabling OCR since easyocr and the nightly torch builds have some conflicts._ + +Source: Issue [#136](https://github.com/DS4SD/docling/issues/136) + + +### Install conflicts with numpy (python 3.13) + + +This has been observed installing docling and langchain via poetry. + +``` +... +Thus, docling (>=2.7.0,<3.0.0) requires numpy (>=1.26.4,<2.0.0). +So, because ... depends on both numpy (>=2.0.2,<3.0.0) and docling (^2.7.0), version solving failed. +``` + +Numpy is only adding Python 3.13 support starting in some 2.x.y version. In order to prepare for 3.13, Docling depends on a 2.x.y for 3.13, otherwise depending an 1.x.y version. If you are allowing 3.13 in your pyproject.toml, Poetry will try to find some way to reconcile Docling's numpy version for 3.13 (some 2.x.y) with LangChain's version for that (some 1.x.y) — leading to the error above. + +Check if Python 3.13 is among the Python versions allowed by your pyproject.toml and if so, remove it and try again. +E.g., if you have python = "^3.10", use python = ">=3.10,<3.13" instead. + +If you want to retain compatibility with python 3.9-3.13, you can also use a selector in pyproject.toml similar to the following + +```toml +numpy = [ + { version = "^2.1.0", markers = 'python_version >= "3.13"' }, + { version = "^1.24.4", markers = 'python_version < "3.13"' }, +] +``` + + +Source: Issue [#283](https://github.com/DS4SD/docling/issues/283#issuecomment-2465035868) + + +### GPU support + +TBA + + +### Text styles (bold, underline, etc) + +TBA + + +### How do I run completely offline? + +Docling is not using any remote service, hence it can run in completely isolated air-gapped environments. + +The only requirement is pointing the Docling runtime to the location where the model artifacts have been stored. + +For example + +```py + +pipeline_options = PdfPipelineOptions(artifacts_path="your location") +converter = DocumentConverter( + format_options={ + InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options) + } +) +``` + +Source: Issue [#326](https://github.com/DS4SD/docling/issues/326) + + +### Which model weights are needed to run Docling? + +Model weights are needed for the AI models used in the PDF pipeline. Other document types (docx, pptx, etc) do not have any such requirement. + +For processing PDF documents, Docling requires the model weights from . + +When OCR is enabled, some engines also require model artifacts. For example EasyOCR, for which Docling has [special pipeline options](https://github.com/DS4SD/docling/blob/main/docling/datamodel/pipeline_options.py#L68) to control the runtime behavior. + + + +### SSL error downloading model weights + +``` +URLError: +``` + +Similar SSL download errors have been observed by some users. This happens when model weights are fetched from Hugging Face. +The error could happen when the python environment doesn't have an up-to-date list of trusted certificates. + +Possible solutions were + +- Update to the latest version of [certifi](https://pypi.org/project/certifi/), i.e. `pip install --upgrade certifi` +- Use [pip-system-certs](https://pypi.org/project/pip-system-certs/) to use the latest trusted certificates on your system. + + +### Which OCR languages are supported? + +Docling supports multiple OCR engine, each one has its own list of supported languages. +Here is a collection of links to the original OCR engine's documentation listing the OCR languages. + +- [EasyOCR](https://www.jaided.ai/easyocr/) +- [Tesseract](https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html) +- [RapidOCR](https://rapidai.github.io/RapidOCRDocs/blog/2022/09/28/%E6%94%AF%E6%8C%81%E8%AF%86%E5%88%AB%E8%AF%AD%E8%A8%80/) +- [Mac OCR](https://github.com/straussmaximilian/ocrmac/tree/main?tab=readme-ov-file#example-select-language-preference) + +Setting the OCR language in Docling is done via the OCR pipeline options: + +```py +from docling.datamodel.pipeline_options import PdfPipelineOptions + +pipeline_options = PdfPipelineOptions() +pipeline_options.ocr_options.lang = ["fr", "de", "es", "en"] # example of languages for easyCOR +``` diff --git a/mkdocs.yml b/mkdocs.yml index dd4502d8..03424b66 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -57,6 +57,7 @@ nav: - Installation: installation.md - Usage: usage.md - CLI: cli.md + - FAQ: faq.md - Docling v2: v2.md - Concepts: - Concepts: concepts/index.md From d4872103b8f24e38b37a8cd3ac414d3e02e7d6e8 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Mon, 2 Dec 2024 09:55:52 +0100 Subject: [PATCH 26/40] docs: add automatic api reference (#475) Signed-off-by: Michele Dolfi --- docling/datamodel/pipeline_options.py | 20 +++++ docs/api_reference/docling_document.md | 52 +++++++++++++ docs/api_reference/document_converter.md | 38 ++++++++++ docs/api_reference/pipeline_options.md | 36 +++++++++ mkdocs.yml | 21 ++++-- poetry.lock | 95 +++++++++++++++++++++++- pyproject.toml | 2 + 7 files changed, 253 insertions(+), 11 deletions(-) create mode 100644 docs/api_reference/docling_document.md create mode 100644 docs/api_reference/document_converter.md create mode 100644 docs/api_reference/pipeline_options.md diff --git a/docling/datamodel/pipeline_options.py b/docling/datamodel/pipeline_options.py index 58a7bb97..63e0d3c6 100644 --- a/docling/datamodel/pipeline_options.py +++ b/docling/datamodel/pipeline_options.py @@ -6,11 +6,15 @@ from pydantic import BaseModel, ConfigDict, Field class TableFormerMode(str, Enum): + """Modes for the TableFormer model.""" + FAST = "fast" ACCURATE = "accurate" class TableStructureOptions(BaseModel): + """Options for the table structure.""" + do_cell_matching: bool = ( True # True: Matches predictions back to PDF cells. Can break table output if PDF cells @@ -21,6 +25,8 @@ class TableStructureOptions(BaseModel): class OcrOptions(BaseModel): + """OCR options.""" + kind: str lang: List[str] force_full_page_ocr: bool = False # If enabled a full page OCR is always applied @@ -30,6 +36,8 @@ class OcrOptions(BaseModel): class RapidOcrOptions(OcrOptions): + """Options for the RapidOCR engine.""" + kind: Literal["rapidocr"] = "rapidocr" # English and chinese are the most commly used models and have been tested with RapidOCR. @@ -66,6 +74,8 @@ class RapidOcrOptions(OcrOptions): class EasyOcrOptions(OcrOptions): + """Options for the EasyOCR engine.""" + kind: Literal["easyocr"] = "easyocr" lang: List[str] = ["fr", "de", "es", "en"] use_gpu: bool = True # same default as easyocr.Reader @@ -79,6 +89,8 @@ class EasyOcrOptions(OcrOptions): class TesseractCliOcrOptions(OcrOptions): + """Options for the TesseractCli engine.""" + kind: Literal["tesseract"] = "tesseract" lang: List[str] = ["fra", "deu", "spa", "eng"] tesseract_cmd: str = "tesseract" @@ -90,6 +102,8 @@ class TesseractCliOcrOptions(OcrOptions): class TesseractOcrOptions(OcrOptions): + """Options for the Tesseract engine.""" + kind: Literal["tesserocr"] = "tesserocr" lang: List[str] = ["fra", "deu", "spa", "eng"] path: Optional[str] = None @@ -100,6 +114,8 @@ class TesseractOcrOptions(OcrOptions): class OcrMacOptions(OcrOptions): + """Options for the Mac OCR engine.""" + kind: Literal["ocrmac"] = "ocrmac" lang: List[str] = ["fr-FR", "de-DE", "es-ES", "en-US"] recognition: str = "accurate" @@ -111,12 +127,16 @@ class OcrMacOptions(OcrOptions): class PipelineOptions(BaseModel): + """Base pipeline options.""" + create_legacy_output: bool = ( True # This defautl will be set to False on a future version of docling ) class PdfPipelineOptions(PipelineOptions): + """Options for the PDF pipeline.""" + artifacts_path: Optional[Union[Path, str]] = None do_table_structure: bool = True # True: perform table structure extraction do_ocr: bool = True # True: perform OCR, replace programmatic PDF text diff --git a/docs/api_reference/docling_document.md b/docs/api_reference/docling_document.md new file mode 100644 index 00000000..d8327894 --- /dev/null +++ b/docs/api_reference/docling_document.md @@ -0,0 +1,52 @@ +# Docling Document + +This is an automatic generated API reference of the DoclingDocument type. + +::: docling_core.types.doc + handler: python + options: + members: + - DoclingDocument + - DocumentOrigin + - DocItem + - DocItemLabel + - ProvenanceItem + - GroupItem + - GroupLabel + - NodeItem + - PageItem + - FloatingItem + - TextItem + - TableItem + - TableCell + - TableData + - TableCellLabel + - KeyValueItem + - SectionHeaderItem + - PictureItem + - ImageRef + - PictureClassificationClass + - PictureClassificationData + - RefItem + - BoundingBox + - CoordOrigin + - ImageRefMode + - Size + show_if_no_docstring: true + show_submodules: true + docstring_section_style: list + filters: ["!^_"] + heading_level: 2 + show_root_toc_entry: true + inherited_members: true + merge_init_into_class: true + separate_signature: true + show_root_heading: true + show_root_full_path: false + show_signature_annotations: true + show_source: false + show_symbol_type_heading: true + show_symbol_type_toc: true + show_labels: false + signature_crossrefs: true + summary: true diff --git a/docs/api_reference/document_converter.md b/docs/api_reference/document_converter.md new file mode 100644 index 00000000..8dc85a3f --- /dev/null +++ b/docs/api_reference/document_converter.md @@ -0,0 +1,38 @@ +# Document converter + +This is an automatic generated API reference of the main components of Docling. + +::: docling.document_converter + handler: python + options: + members: + - DocumentConverter + - ConversionResult + - ConversionStatus + - FormatOption + - InputFormat + - PdfFormatOption + - ImageFormatOption + - StandardPdfPipeline + - WordFormatOption + - PowerpointFormatOption + - MarkdownFormatOption + - AsciiDocFormatOption + - HTMLFormatOption + - SimplePipeline + show_if_no_docstring: true + show_submodules: true + docstring_section_style: list + filters: ["!^_"] + heading_level: 2 + inherited_members: true + merge_init_into_class: true + separate_signature: true + show_root_heading: true + show_root_full_path: false + show_signature_annotations: true + show_source: false + show_symbol_type_heading: true + show_symbol_type_toc: true + signature_crossrefs: true + summary: true diff --git a/docs/api_reference/pipeline_options.md b/docs/api_reference/pipeline_options.md new file mode 100644 index 00000000..dc3924d7 --- /dev/null +++ b/docs/api_reference/pipeline_options.md @@ -0,0 +1,36 @@ +# Pipeline options + +Pipeline options allow to customize the execution of the models during the conversion pipeline. +This includes options for the OCR engines, the table model as well as enrichment options which +can be enabled with `do_xyz = True`. + + +This is an automatic generated API reference of the all the pipeline options available in Docling. + + +::: docling.datamodel.pipeline_options + handler: python + options: + show_if_no_docstring: true + show_submodules: true + docstring_section_style: list + filters: ["!^_"] + heading_level: 2 + inherited_members: true + merge_init_into_class: true + separate_signature: true + show_root_heading: true + show_root_full_path: false + show_signature_annotations: true + show_source: false + show_symbol_type_heading: true + show_symbol_type_toc: true + signature_crossrefs: true + summary: true + + + diff --git a/mkdocs.yml b/mkdocs.yml index 03424b66..731e2ee6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -95,8 +95,10 @@ nav: - "Prodigy": integrations/prodigy.md - "spaCy": integrations/spacy.md # - "LangChain 🦜🔗": integrations/langchain.md - # - API reference: - # - API reference: api_reference/index.md + - API reference: + - Document Converter: api_reference/document_converter.md + - Pipeline options: api_reference/pipeline_options.md + - Docling Document: api_reference/docling_document.md markdown_extensions: - pymdownx.superfences @@ -112,12 +114,15 @@ markdown_extensions: plugins: - search - mkdocs-jupyter - # - mkdocstrings: - # default_handler: python - # options: - # preload_modules: - # - docling - # - docling_core + - mkdocstrings: + default_handler: python + options: + extensions: + - griffe_pydantic: + schema: true + preload_modules: + - docling + - docling_core extra_css: - stylesheets/extra.css diff --git a/poetry.lock b/poetry.lock index 9221eb2d..9e057ed0 100644 --- a/poetry.lock +++ b/poetry.lock @@ -1365,6 +1365,34 @@ gitdb = ">=4.0.1,<5" doc = ["sphinx (==4.3.2)", "sphinx-autodoc-typehints", "sphinx-rtd-theme", "sphinxcontrib-applehelp (>=1.0.2,<=1.0.4)", "sphinxcontrib-devhelp (==1.0.2)", "sphinxcontrib-htmlhelp (>=2.0.0,<=2.0.1)", "sphinxcontrib-qthelp (==1.0.3)", "sphinxcontrib-serializinghtml (==1.1.5)"] test = ["coverage[toml]", "ddt (>=1.1.1,!=1.4.3)", "mock", "mypy", "pre-commit", "pytest (>=7.3.1)", "pytest-cov", "pytest-instafail", "pytest-mock", "pytest-sugar", "typing-extensions"] +[[package]] +name = "griffe" +version = "1.5.1" +description = "Signatures for entire Python programs. Extract the structure, the frame, the skeleton of your project, to generate API documentation or find breaking changes in your API." +optional = false +python-versions = ">=3.9" +files = [ + {file = "griffe-1.5.1-py3-none-any.whl", hash = "sha256:ad6a7980f8c424c9102160aafa3bcdf799df0e75f7829d75af9ee5aef656f860"}, + {file = "griffe-1.5.1.tar.gz", hash = "sha256:72964f93e08c553257706d6cd2c42d1c172213feb48b2be386f243380b405d4b"}, +] + +[package.dependencies] +colorama = ">=0.4" + +[[package]] +name = "griffe-pydantic" +version = "1.1.0" +description = "Griffe extension for Pydantic." +optional = false +python-versions = ">=3.9" +files = [ + {file = "griffe_pydantic-1.1.0-py3-none-any.whl", hash = "sha256:ac9cc2d9b016cf302d8d9f577c9b3ca2793d88060f500d0b2a65f33a4a785cf1"}, + {file = "griffe_pydantic-1.1.0.tar.gz", hash = "sha256:9c5a701cc485dab087857c1ac960b44671acee5008aaae0752f610b2aa82b068"}, +] + +[package.dependencies] +griffe = ">=0.49" + [[package]] name = "grpcio" version = "1.67.1" @@ -2640,6 +2668,22 @@ watchdog = ">=2.0" i18n = ["babel (>=2.9.0)"] min-versions = ["babel (==2.9.0)", "click (==7.0)", "colorama (==0.4)", "ghp-import (==1.0)", "importlib-metadata (==4.4)", "jinja2 (==2.11.1)", "markdown (==3.3.6)", "markupsafe (==2.0.1)", "mergedeep (==1.3.4)", "mkdocs-get-deps (==0.2.0)", "packaging (==20.5)", "pathspec (==0.11.1)", "pyyaml (==5.1)", "pyyaml-env-tag (==0.1)", "watchdog (==2.0)"] +[[package]] +name = "mkdocs-autorefs" +version = "1.2.0" +description = "Automatically link across pages in MkDocs." +optional = false +python-versions = ">=3.8" +files = [ + {file = "mkdocs_autorefs-1.2.0-py3-none-any.whl", hash = "sha256:d588754ae89bd0ced0c70c06f58566a4ee43471eeeee5202427da7de9ef85a2f"}, + {file = "mkdocs_autorefs-1.2.0.tar.gz", hash = "sha256:a86b93abff653521bda71cf3fc5596342b7a23982093915cb74273f67522190f"}, +] + +[package.dependencies] +Markdown = ">=3.3" +markupsafe = ">=2.0.1" +mkdocs = ">=1.1" + [[package]] name = "mkdocs-click" version = "0.8.1" @@ -2731,6 +2775,51 @@ files = [ {file = "mkdocs_material_extensions-1.3.1.tar.gz", hash = "sha256:10c9511cea88f568257f960358a467d12b970e1f7b2c0e5fb2bb48cab1928443"}, ] +[[package]] +name = "mkdocstrings" +version = "0.27.0" +description = "Automatic documentation from sources, for MkDocs." +optional = false +python-versions = ">=3.9" +files = [ + {file = "mkdocstrings-0.27.0-py3-none-any.whl", hash = "sha256:6ceaa7ea830770959b55a16203ac63da24badd71325b96af950e59fd37366332"}, + {file = "mkdocstrings-0.27.0.tar.gz", hash = "sha256:16adca6d6b0a1f9e0c07ff0b02ced8e16f228a9d65a37c063ec4c14d7b76a657"}, +] + +[package.dependencies] +click = ">=7.0" +importlib-metadata = {version = ">=4.6", markers = "python_version < \"3.10\""} +Jinja2 = ">=2.11.1" +Markdown = ">=3.6" +MarkupSafe = ">=1.1" +mkdocs = ">=1.4" +mkdocs-autorefs = ">=1.2" +mkdocstrings-python = {version = ">=0.5.2", optional = true, markers = "extra == \"python\""} +platformdirs = ">=2.2" +pymdown-extensions = ">=6.3" +typing-extensions = {version = ">=4.1", markers = "python_version < \"3.10\""} + +[package.extras] +crystal = ["mkdocstrings-crystal (>=0.3.4)"] +python = ["mkdocstrings-python (>=0.5.2)"] +python-legacy = ["mkdocstrings-python-legacy (>=0.2.1)"] + +[[package]] +name = "mkdocstrings-python" +version = "1.12.2" +description = "A Python handler for mkdocstrings." +optional = false +python-versions = ">=3.9" +files = [ + {file = "mkdocstrings_python-1.12.2-py3-none-any.whl", hash = "sha256:7f7d40d6db3cb1f5d19dbcd80e3efe4d0ba32b073272c0c0de9de2e604eda62a"}, + {file = "mkdocstrings_python-1.12.2.tar.gz", hash = "sha256:7a1760941c0b52a2cd87b960a9e21112ffe52e7df9d0b9583d04d47ed2e186f3"}, +] + +[package.dependencies] +griffe = ">=0.49" +mkdocs-autorefs = ">=1.2" +mkdocstrings = ">=0.26" + [[package]] name = "more-itertools" version = "10.5.0" @@ -3676,9 +3765,9 @@ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] [[package]] @@ -3702,9 +3791,9 @@ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, - {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, + {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, ] [[package]] @@ -7557,4 +7646,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "3be886856c0f11033cfb7cb8bc30e5d59d7bb9804df9da9572b3cfbc2f6c3c56" +content-hash = "2e7c27ffe32d556a66cc1008a7147a90c17f63b01d2a6cde3e7b941ba7e268d7" diff --git a/pyproject.toml b/pyproject.toml index 81cffb10..4d4ceac9 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -80,6 +80,8 @@ types-openpyxl = "^3.1.5.20241114" mkdocs-material = "^9.5.40" mkdocs-jupyter = "^0.25.0" mkdocs-click = "^0.8.1" +mkdocstrings = {extras = ["python"], version = "^0.27.0"} +griffe-pydantic = "^1.1.0" [tool.poetry.group.examples.dependencies] datasets = "^2.21.0" From 33cff98d360c02a382a66850c696a0cf511659ac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Huertas?= <123009293+huertin03@users.noreply.github.com> Date: Mon, 2 Dec 2024 10:35:24 +0100 Subject: [PATCH 27/40] docs: typo in faq (#484) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Typo faq.md Signed-off-by: Álvaro Huertas <123009293+huertin03@users.noreply.github.com> --- docs/faq.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/docs/faq.md b/docs/faq.md index a38f5544..b3f93d75 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -130,5 +130,5 @@ Setting the OCR language in Docling is done via the OCR pipeline options: from docling.datamodel.pipeline_options import PdfPipelineOptions pipeline_options = PdfPipelineOptions() -pipeline_options.ocr_options.lang = ["fr", "de", "es", "en"] # example of languages for easyCOR +pipeline_options.ocr_options.lang = ["fr", "de", "es", "en"] # example of languages for EasyOCR ``` From d3f84b2457125feacd0c21d6513e7ae69a308ea5 Mon Sep 17 00:00:00 2001 From: Gaspard Petit Date: Tue, 3 Dec 2024 04:22:03 -0500 Subject: [PATCH 28/40] fix: PermissionError when using tesseract_ocr_cli_model (#496) Signed-off-by: Gaspard Petit --- docling/models/tesseract_ocr_cli_model.py | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/docling/models/tesseract_ocr_cli_model.py b/docling/models/tesseract_ocr_cli_model.py index 9a50eee0..ababe670 100644 --- a/docling/models/tesseract_ocr_cli_model.py +++ b/docling/models/tesseract_ocr_cli_model.py @@ -1,5 +1,6 @@ import io import logging +import os import tempfile from subprocess import DEVNULL, PIPE, Popen from typing import Iterable, Optional, Tuple @@ -130,14 +131,17 @@ class TesseractOcrCliModel(BaseOcrModel): high_res_image = page._backend.get_page_image( scale=self.scale, cropbox=ocr_rect ) - - with tempfile.NamedTemporaryFile( - suffix=".png", mode="w" - ) as image_file: - fname = image_file.name - high_res_image.save(fname) + try: + with tempfile.NamedTemporaryFile( + suffix=".png", mode="w+b", delete=False + ) as image_file: + fname = image_file.name + high_res_image.save(image_file) df = self._run_tesseract(fname) + finally: + if os.path.exists(fname): + os.remove(fname) # _log.info(df) From 051789d01706d3823dd6307eca4dc5faacd1b7ce Mon Sep 17 00:00:00 2001 From: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Date: Tue, 3 Dec 2024 10:40:28 +0100 Subject: [PATCH 29/40] perf: prevent temp file leftovers, reuse core type (#487) * chore: reuse DocumentStream from docling-core Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * update docling-core version Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * [skip ci] document import line Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * fix: use new resolve_source_to_x functions to avoid tempfile leftovers (#490) use new resolve_source_to_x functions Signed-off-by: Michele Dolfi --------- Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Signed-off-by: Michele Dolfi Co-authored-by: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> --- docling/cli/main.py | 168 ++++++++++++++++--------------- docling/datamodel/base_models.py | 11 +- docling/datamodel/document.py | 4 +- poetry.lock | 15 ++- pyproject.toml | 2 +- 5 files changed, 103 insertions(+), 97 deletions(-) diff --git a/docling/cli/main.py b/docling/cli/main.py index ac8b19aa..ec2c0777 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -2,6 +2,7 @@ import importlib import json import logging import re +import tempfile import time import warnings from enum import Enum @@ -9,7 +10,7 @@ from pathlib import Path from typing import Annotated, Dict, Iterable, List, Optional, Type import typer -from docling_core.utils.file import resolve_file_source +from docling_core.utils.file import resolve_source_to_path from docling.backend.docling_parse_backend import DoclingParseDocumentBackend from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend @@ -256,95 +257,98 @@ def convert( if from_formats is None: from_formats = [e for e in InputFormat] - input_doc_paths: List[Path] = [] - for src in input_sources: - source = resolve_file_source(source=src) - if not source.exists(): - err_console.print( - f"[red]Error: The input file {source} does not exist.[/red]" - ) - raise typer.Abort() - elif source.is_dir(): - for fmt in from_formats: - for ext in FormatToExtensions[fmt]: - input_doc_paths.extend(list(source.glob(f"**/*.{ext}"))) - input_doc_paths.extend(list(source.glob(f"**/*.{ext.upper()}"))) + with tempfile.TemporaryDirectory() as tempdir: + input_doc_paths: List[Path] = [] + for src in input_sources: + source = resolve_source_to_path(source=src, workdir=Path(tempdir)) + if not source.exists(): + err_console.print( + f"[red]Error: The input file {source} does not exist.[/red]" + ) + raise typer.Abort() + elif source.is_dir(): + for fmt in from_formats: + for ext in FormatToExtensions[fmt]: + input_doc_paths.extend(list(source.glob(f"**/*.{ext}"))) + input_doc_paths.extend(list(source.glob(f"**/*.{ext.upper()}"))) + else: + input_doc_paths.append(source) + + if to_formats is None: + to_formats = [OutputFormat.MARKDOWN] + + export_json = OutputFormat.JSON in to_formats + export_md = OutputFormat.MARKDOWN in to_formats + export_txt = OutputFormat.TEXT in to_formats + export_doctags = OutputFormat.DOCTAGS in to_formats + + if ocr_engine == OcrEngine.EASYOCR: + ocr_options: OcrOptions = EasyOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.TESSERACT_CLI: + ocr_options = TesseractCliOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.TESSERACT: + ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.OCRMAC: + ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) + elif ocr_engine == OcrEngine.RAPIDOCR: + ocr_options = RapidOcrOptions(force_full_page_ocr=force_ocr) else: - input_doc_paths.append(source) + raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") - if to_formats is None: - to_formats = [OutputFormat.MARKDOWN] + ocr_lang_list = _split_list(ocr_lang) + if ocr_lang_list is not None: + ocr_options.lang = ocr_lang_list - export_json = OutputFormat.JSON in to_formats - export_md = OutputFormat.MARKDOWN in to_formats - export_txt = OutputFormat.TEXT in to_formats - export_doctags = OutputFormat.DOCTAGS in to_formats - - if ocr_engine == OcrEngine.EASYOCR: - ocr_options: OcrOptions = EasyOcrOptions(force_full_page_ocr=force_ocr) - elif ocr_engine == OcrEngine.TESSERACT_CLI: - ocr_options = TesseractCliOcrOptions(force_full_page_ocr=force_ocr) - elif ocr_engine == OcrEngine.TESSERACT: - ocr_options = TesseractOcrOptions(force_full_page_ocr=force_ocr) - elif ocr_engine == OcrEngine.OCRMAC: - ocr_options = OcrMacOptions(force_full_page_ocr=force_ocr) - elif ocr_engine == OcrEngine.RAPIDOCR: - ocr_options = RapidOcrOptions(force_full_page_ocr=force_ocr) - else: - raise RuntimeError(f"Unexpected OCR engine type {ocr_engine}") - - ocr_lang_list = _split_list(ocr_lang) - if ocr_lang_list is not None: - ocr_options.lang = ocr_lang_list - - pipeline_options = PdfPipelineOptions( - do_ocr=ocr, - ocr_options=ocr_options, - do_table_structure=True, - ) - pipeline_options.table_structure_options.do_cell_matching = True # do_cell_matching - pipeline_options.table_structure_options.mode = table_mode - - if artifacts_path is not None: - pipeline_options.artifacts_path = artifacts_path - - if pdf_backend == PdfBackend.DLPARSE_V1: - backend: Type[PdfDocumentBackend] = DoclingParseDocumentBackend - elif pdf_backend == PdfBackend.DLPARSE_V2: - backend = DoclingParseV2DocumentBackend - elif pdf_backend == PdfBackend.PYPDFIUM2: - backend = PyPdfiumDocumentBackend - else: - raise RuntimeError(f"Unexpected PDF backend type {pdf_backend}") - - format_options: Dict[InputFormat, FormatOption] = { - InputFormat.PDF: PdfFormatOption( - pipeline_options=pipeline_options, - backend=backend, # pdf_backend + pipeline_options = PdfPipelineOptions( + do_ocr=ocr, + ocr_options=ocr_options, + do_table_structure=True, ) - } - doc_converter = DocumentConverter( - allowed_formats=from_formats, - format_options=format_options, - ) + pipeline_options.table_structure_options.do_cell_matching = ( + True # do_cell_matching + ) + pipeline_options.table_structure_options.mode = table_mode - start_time = time.time() + if artifacts_path is not None: + pipeline_options.artifacts_path = artifacts_path - conv_results = doc_converter.convert_all( - input_doc_paths, raises_on_error=abort_on_error - ) + if pdf_backend == PdfBackend.DLPARSE_V1: + backend: Type[PdfDocumentBackend] = DoclingParseDocumentBackend + elif pdf_backend == PdfBackend.DLPARSE_V2: + backend = DoclingParseV2DocumentBackend + elif pdf_backend == PdfBackend.PYPDFIUM2: + backend = PyPdfiumDocumentBackend + else: + raise RuntimeError(f"Unexpected PDF backend type {pdf_backend}") - output.mkdir(parents=True, exist_ok=True) - export_documents( - conv_results, - output_dir=output, - export_json=export_json, - export_md=export_md, - export_txt=export_txt, - export_doctags=export_doctags, - ) + format_options: Dict[InputFormat, FormatOption] = { + InputFormat.PDF: PdfFormatOption( + pipeline_options=pipeline_options, + backend=backend, # pdf_backend + ) + } + doc_converter = DocumentConverter( + allowed_formats=from_formats, + format_options=format_options, + ) - end_time = time.time() - start_time + start_time = time.time() + + conv_results = doc_converter.convert_all( + input_doc_paths, raises_on_error=abort_on_error + ) + + output.mkdir(parents=True, exist_ok=True) + export_documents( + conv_results, + output_dir=output, + export_json=export_json, + export_md=export_md, + export_txt=export_txt, + export_doctags=export_doctags, + ) + + end_time = time.time() - start_time _log.info(f"All documents were converted in {end_time:.2f} seconds.") diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index 311d6d01..8e584f4b 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -1,5 +1,4 @@ from enum import Enum, auto -from io import BytesIO from typing import TYPE_CHECKING, Dict, List, Optional, Union from docling_core.types.doc import ( @@ -9,6 +8,9 @@ from docling_core.types.doc import ( Size, TableCell, ) +from docling_core.types.io import ( # DO ΝΟΤ REMOVE; explicitly exposed from this location + DocumentStream, +) from PIL.Image import Image from pydantic import BaseModel, ConfigDict @@ -207,10 +209,3 @@ class Page(BaseModel): @property def image(self) -> Optional[Image]: return self.get_image(scale=self._default_image_scale) - - -class DocumentStream(BaseModel): - model_config = ConfigDict(arbitrary_types_allowed=True) - - name: str - stream: BytesIO diff --git a/docling/datamodel/document.py b/docling/datamodel/document.py index be4e9a12..2fadb7f9 100644 --- a/docling/datamodel/document.py +++ b/docling/datamodel/document.py @@ -32,7 +32,7 @@ from docling_core.types.legacy_doc.document import ( ) from docling_core.types.legacy_doc.document import CCSFileInfoObject as DsFileInfoObject from docling_core.types.legacy_doc.document import ExportedCCSDocument as DsDocument -from docling_core.utils.file import resolve_file_source +from docling_core.utils.file import resolve_source_to_stream from pydantic import BaseModel from typing_extensions import deprecated @@ -459,7 +459,7 @@ class _DocumentConversionInput(BaseModel): self, format_options: Dict[InputFormat, "FormatOption"] ) -> Iterable[InputDocument]: for item in self.path_or_stream_iterator: - obj = resolve_file_source(item) if isinstance(item, str) else item + obj = resolve_source_to_stream(item) if isinstance(item, str) else item format = self._guess_format(obj) if format not in format_options.keys(): _log.info( diff --git a/poetry.lock b/poetry.lock index 9e057ed0..92072569 100644 --- a/poetry.lock +++ b/poetry.lock @@ -896,13 +896,13 @@ files = [ [[package]] name = "docling-core" -version = "2.5.1" +version = "2.6.1" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.5.1-py3-none-any.whl", hash = "sha256:e4a5626520714c25a5ec2f9f7495407e730485257c2272e8467faae7357435bf"}, - {file = "docling_core-2.5.1.tar.gz", hash = "sha256:e9a7c7c46f869b13747436a2ce42df3632af655e1a3af574dfcd114e71dcbb75"}, + {file = "docling_core-2.6.1-py3-none-any.whl", hash = "sha256:8e7a5bc0ce13289567738481949fed3ab580f2d8cea7525b246159233d81b26b"}, + {file = "docling_core-2.6.1.tar.gz", hash = "sha256:c8af45e0873611120cc24757d567d37e053a54e2ce060b7b5b44efd0d73f75e5"}, ] [package.dependencies] @@ -913,6 +913,7 @@ pillow = ">=10.3.0,<11.0.0" pydantic = ">=2.6.0,<2.10" pyyaml = ">=5.1,<7.0.0" tabulate = ">=0.9.0,<0.10.0" +typing-extensions = ">=4.12.2,<5.0.0" [[package]] name = "docling-ibm-models" @@ -3200,6 +3201,7 @@ files = [ {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00810cd5275f5c3f44b9eb0e521d1a841ee2f8023622de39ffc7d88bd533d8e0"}, {file = "nh3-0.2.19-cp38-abi3-win32.whl", hash = "sha256:7e98621856b0a911c21faa5eef8f8ea3e691526c2433f9afc2be713cb6fbdb48"}, {file = "nh3-0.2.19-cp38-abi3-win_amd64.whl", hash = "sha256:75c7cafb840f24430b009f7368945cb5ca88b2b54bb384ebfba495f16bc9c121"}, + {file = "nh3-0.2.19.tar.gz", hash = "sha256:790056b54c068ff8dceb443eaefb696b84beff58cca6c07afd754d17692a4804"}, ] [[package]] @@ -6028,6 +6030,11 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, + {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, + {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, + {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -7646,4 +7653,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "2e7c27ffe32d556a66cc1008a7147a90c17f63b01d2a6cde3e7b941ba7e268d7" +content-hash = "ee3b3d938295f0057567c10fb808a0d95ed2fe9a32f459d489b4b29aacf710c8" diff --git a/pyproject.toml b/pyproject.toml index 4d4ceac9..ed030471 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -26,7 +26,7 @@ packages = [{include = "docling"}] ###################### python = "^3.9" pydantic = ">=2.0.0,<2.10" -docling-core = "^2.5.1" +docling-core = "^2.6.1" docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" From 5ba3807f315a01b1a4e8df9bab40e34a4238205a Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:20:49 +0100 Subject: [PATCH 30/40] docs: add styling for faq (#502) * docs: add styling to faq Signed-off-by: Michele Dolfi * remove torchaudio Signed-off-by: Michele Dolfi --------- Signed-off-by: Michele Dolfi --- docs/faq.md | 209 ++++++++++++++++++++++++++++------------------------ 1 file changed, 111 insertions(+), 98 deletions(-) diff --git a/docs/faq.md b/docs/faq.md index b3f93d75..8c8e4793 100644 --- a/docs/faq.md +++ b/docs/faq.md @@ -3,132 +3,145 @@ This is a collection of FAQ collected from the user questions on . -### Python 3.13 support +??? question "Is Python 3.13 supported?" -Full support for Python 3.13 is currently waiting for [pytorch](https://github.com/pytorch/pytorch). + ### Is Python 3.13 supported? -At the moment, no release has full support, but nightly builds are available. Docling was tested on Python 3.13 with the following steps: + Full support for Python 3.13 is currently waiting for [pytorch](https://github.com/pytorch/pytorch). -```sh -# Create a python 3.13 virtualenv -python3.13 -m venv venv -source ./venv/bin/activate + At the moment, no release has full support, but nightly builds are available. Docling was tested on Python 3.13 with the following steps: -# Install torch nightly builds, see https://pytorch.org/ -pip3 install --pre torch torchvision torchaudio --index-url https://download.pytorch.org/whl/nightly/cpu + ```sh + # Create a python 3.13 virtualenv + python3.13 -m venv venv + source ./venv/bin/activate -# Install docling -pip3 install docling + # Install torch nightly builds, see https://pytorch.org/ + pip3 install --pre torch torchvision --index-url https://download.pytorch.org/whl/nightly/cpu -# Run docling -docling --no-ocr https://arxiv.org/pdf/2408.09869 -``` + # Install docling + pip3 install docling -_Note: we are disabling OCR since easyocr and the nightly torch builds have some conflicts._ + # Run docling + docling --no-ocr https://arxiv.org/pdf/2408.09869 + ``` -Source: Issue [#136](https://github.com/DS4SD/docling/issues/136) + _Note: we are disabling OCR since easyocr and the nightly torch builds have some conflicts._ + + Source: Issue [#136](https://github.com/DS4SD/docling/issues/136) -### Install conflicts with numpy (python 3.13) +??? question "Install conflicts with numpy (python 3.13)" + + ### Install conflicts with numpy (python 3.13) + + When using `docling-ibm-models>=2.0.7` and `deepsearch-glm>=0.26.2` these issues should not show up anymore. + Docling supports numpy versions `>=1.24.4,<3.0.0` which should match all usages. + + **For older versions** + + This has been observed installing docling and langchain via poetry. + + ``` + ... + Thus, docling (>=2.7.0,<3.0.0) requires numpy (>=1.26.4,<2.0.0). + So, because ... depends on both numpy (>=2.0.2,<3.0.0) and docling (^2.7.0), version solving failed. + ``` + + Numpy is only adding Python 3.13 support starting in some 2.x.y version. In order to prepare for 3.13, Docling depends on a 2.x.y for 3.13, otherwise depending an 1.x.y version. If you are allowing 3.13 in your pyproject.toml, Poetry will try to find some way to reconcile Docling's numpy version for 3.13 (some 2.x.y) with LangChain's version for that (some 1.x.y) — leading to the error above. + + Check if Python 3.13 is among the Python versions allowed by your pyproject.toml and if so, remove it and try again. + E.g., if you have python = "^3.10", use python = ">=3.10,<3.13" instead. + + If you want to retain compatibility with python 3.9-3.13, you can also use a selector in pyproject.toml similar to the following + + ```toml + numpy = [ + { version = "^2.1.0", markers = 'python_version >= "3.13"' }, + { version = "^1.24.4", markers = 'python_version < "3.13"' }, + ] + ``` + + Source: Issue [#283](https://github.com/DS4SD/docling/issues/283#issuecomment-2465035868) -This has been observed installing docling and langchain via poetry. +??? question "Are text styles (bold, underline, etc) supported?" -``` -... -Thus, docling (>=2.7.0,<3.0.0) requires numpy (>=1.26.4,<2.0.0). -So, because ... depends on both numpy (>=2.0.2,<3.0.0) and docling (^2.7.0), version solving failed. -``` + ### Are text styles (bold, underline, etc) supported? -Numpy is only adding Python 3.13 support starting in some 2.x.y version. In order to prepare for 3.13, Docling depends on a 2.x.y for 3.13, otherwise depending an 1.x.y version. If you are allowing 3.13 in your pyproject.toml, Poetry will try to find some way to reconcile Docling's numpy version for 3.13 (some 2.x.y) with LangChain's version for that (some 1.x.y) — leading to the error above. + Currently text styles are not supported in the `DoclingDocument` format. + If you are interest in contributing this feature, please open a discussion topic to brainstorm on the design. -Check if Python 3.13 is among the Python versions allowed by your pyproject.toml and if so, remove it and try again. -E.g., if you have python = "^3.10", use python = ">=3.10,<3.13" instead. - -If you want to retain compatibility with python 3.9-3.13, you can also use a selector in pyproject.toml similar to the following - -```toml -numpy = [ - { version = "^2.1.0", markers = 'python_version >= "3.13"' }, - { version = "^1.24.4", markers = 'python_version < "3.13"' }, -] -``` + _Note: this is not a simple topic_ -Source: Issue [#283](https://github.com/DS4SD/docling/issues/283#issuecomment-2465035868) +??? question "How do I run completely offline?" + + ### How do I run completely offline? + + Docling is not using any remote service, hence it can run in completely isolated air-gapped environments. + + The only requirement is pointing the Docling runtime to the location where the model artifacts have been stored. + + For example + + ```py + + pipeline_options = PdfPipelineOptions(artifacts_path="your location") + converter = DocumentConverter( + format_options={ + InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options) + } + ) + ``` + + Source: Issue [#326](https://github.com/DS4SD/docling/issues/326) -### GPU support +??? question " Which model weights are needed to run Docling?" + ### Which model weights are needed to run Docling? -TBA + Model weights are needed for the AI models used in the PDF pipeline. Other document types (docx, pptx, etc) do not have any such requirement. + + For processing PDF documents, Docling requires the model weights from . + + When OCR is enabled, some engines also require model artifacts. For example EasyOCR, for which Docling has [special pipeline options](https://github.com/DS4SD/docling/blob/main/docling/datamodel/pipeline_options.py#L68) to control the runtime behavior. -### Text styles (bold, underline, etc) +??? question "SSL error downloading model weights" -TBA + ### SSL error downloading model weights + + ``` + URLError: + ``` + + Similar SSL download errors have been observed by some users. This happens when model weights are fetched from Hugging Face. + The error could happen when the python environment doesn't have an up-to-date list of trusted certificates. + + Possible solutions were + + - Update to the latest version of [certifi](https://pypi.org/project/certifi/), i.e. `pip install --upgrade certifi` + - Use [pip-system-certs](https://pypi.org/project/pip-system-certs/) to use the latest trusted certificates on your system. -### How do I run completely offline? +??? question "Which OCR languages are supported?" -Docling is not using any remote service, hence it can run in completely isolated air-gapped environments. + ### Which OCR languages are supported? -The only requirement is pointing the Docling runtime to the location where the model artifacts have been stored. + Docling supports multiple OCR engine, each one has its own list of supported languages. + Here is a collection of links to the original OCR engine's documentation listing the OCR languages. -For example + - [EasyOCR](https://www.jaided.ai/easyocr/) + - [Tesseract](https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html) + - [RapidOCR](https://rapidai.github.io/RapidOCRDocs/blog/2022/09/28/%E6%94%AF%E6%8C%81%E8%AF%86%E5%88%AB%E8%AF%AD%E8%A8%80/) + - [Mac OCR](https://github.com/straussmaximilian/ocrmac/tree/main?tab=readme-ov-file#example-select-language-preference) -```py + Setting the OCR language in Docling is done via the OCR pipeline options: -pipeline_options = PdfPipelineOptions(artifacts_path="your location") -converter = DocumentConverter( - format_options={ - InputFormat.PDF: PdfFormatOption(pipeline_options=pipeline_options) - } -) -``` + ```py + from docling.datamodel.pipeline_options import PdfPipelineOptions -Source: Issue [#326](https://github.com/DS4SD/docling/issues/326) - - -### Which model weights are needed to run Docling? - -Model weights are needed for the AI models used in the PDF pipeline. Other document types (docx, pptx, etc) do not have any such requirement. - -For processing PDF documents, Docling requires the model weights from . - -When OCR is enabled, some engines also require model artifacts. For example EasyOCR, for which Docling has [special pipeline options](https://github.com/DS4SD/docling/blob/main/docling/datamodel/pipeline_options.py#L68) to control the runtime behavior. - - - -### SSL error downloading model weights - -``` -URLError: -``` - -Similar SSL download errors have been observed by some users. This happens when model weights are fetched from Hugging Face. -The error could happen when the python environment doesn't have an up-to-date list of trusted certificates. - -Possible solutions were - -- Update to the latest version of [certifi](https://pypi.org/project/certifi/), i.e. `pip install --upgrade certifi` -- Use [pip-system-certs](https://pypi.org/project/pip-system-certs/) to use the latest trusted certificates on your system. - - -### Which OCR languages are supported? - -Docling supports multiple OCR engine, each one has its own list of supported languages. -Here is a collection of links to the original OCR engine's documentation listing the OCR languages. - -- [EasyOCR](https://www.jaided.ai/easyocr/) -- [Tesseract](https://tesseract-ocr.github.io/tessdoc/Data-Files-in-different-versions.html) -- [RapidOCR](https://rapidai.github.io/RapidOCRDocs/blog/2022/09/28/%E6%94%AF%E6%8C%81%E8%AF%86%E5%88%AB%E8%AF%AD%E8%A8%80/) -- [Mac OCR](https://github.com/straussmaximilian/ocrmac/tree/main?tab=readme-ov-file#example-select-language-preference) - -Setting the OCR language in Docling is done via the OCR pipeline options: - -```py -from docling.datamodel.pipeline_options import PdfPipelineOptions - -pipeline_options = PdfPipelineOptions() -pipeline_options.ocr_options.lang = ["fr", "de", "es", "en"] # example of languages for EasyOCR -``` + pipeline_options = PdfPipelineOptions() + pipeline_options.ocr_options.lang = ["fr", "de", "es", "en"] # example of languages for EasyOCR + ``` From c90c41c391de4366db554d7a71ce9a35467c981e Mon Sep 17 00:00:00 2001 From: guglie Date: Tue, 3 Dec 2024 11:21:18 +0100 Subject: [PATCH 31/40] fix: ParserError EOF inside string (#470) (#472) Signed-off-by: guglie --- docling/models/tesseract_ocr_cli_model.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/docling/models/tesseract_ocr_cli_model.py b/docling/models/tesseract_ocr_cli_model.py index ababe670..16e1629d 100644 --- a/docling/models/tesseract_ocr_cli_model.py +++ b/docling/models/tesseract_ocr_cli_model.py @@ -1,3 +1,4 @@ +import csv import io import logging import os @@ -96,7 +97,7 @@ class TesseractOcrCliModel(BaseOcrModel): # _log.info(decoded_data) # Read the TSV file generated by Tesseract - df = pd.read_csv(io.StringIO(decoded_data), sep="\t") + df = pd.read_csv(io.StringIO(decoded_data), quoting=csv.QUOTE_NONE, sep="\t") # Display the dataframe (optional) # _log.info("df: ", df.head()) From 672962a8b291fa776c3b59de30e04dba76cb3551 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Tue, 3 Dec 2024 11:21:31 +0100 Subject: [PATCH 32/40] chore: update numpy lock (#500) Signed-off-by: Michele Dolfi --- poetry.lock | 1024 ++++++++++++++++++++++++------------------------ pyproject.toml | 7 +- 2 files changed, 514 insertions(+), 517 deletions(-) diff --git a/poetry.lock b/poetry.lock index 92072569..184658ea 100644 --- a/poetry.lock +++ b/poetry.lock @@ -2,98 +2,98 @@ [[package]] name = "aiohappyeyeballs" -version = "2.4.3" +version = "2.4.4" description = "Happy Eyeballs for asyncio" optional = false python-versions = ">=3.8" files = [ - {file = "aiohappyeyeballs-2.4.3-py3-none-any.whl", hash = "sha256:8a7a83727b2756f394ab2895ea0765a0a8c475e3c71e98d43d76f22b4b435572"}, - {file = "aiohappyeyeballs-2.4.3.tar.gz", hash = "sha256:75cf88a15106a5002a8eb1dab212525c00d1f4c0fa96e551c9fbe6f09a621586"}, + {file = "aiohappyeyeballs-2.4.4-py3-none-any.whl", hash = "sha256:a980909d50efcd44795c4afeca523296716d50cd756ddca6af8c65b996e27de8"}, + {file = "aiohappyeyeballs-2.4.4.tar.gz", hash = "sha256:5fdd7d87889c63183afc18ce9271f9b0a7d32c2303e394468dd45d514a757745"}, ] [[package]] name = "aiohttp" -version = "3.11.8" +version = "3.11.9" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.8-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:2d2ca685c6a851ce64e511fbcb906e4dd97d13e567ca7ecb5cb30b184e15dc6d"}, - {file = "aiohttp-3.11.8-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:52913bb8a0a72a57479f54b281300c9d23036aa9aa3ebbc9a32a643484eadfc2"}, - {file = "aiohttp-3.11.8-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:35dafc70051b6cbd6dafb533b4e3f0df6225a4896be373ef86367b2987409331"}, - {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:561b9596a9f90266673ef0b950c27e04ab597cdb53785e2ac91b83b33c31b509"}, - {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d479c1fdcc920056a06d04059db52eb8590ecbbb3acdcaeeea26a88ff782e94a"}, - {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9ce8eb6444bb6e862feca664ce365afa8e2e32db24dcf1a502719a8a002f9274"}, - {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:df9bf08eb93611b1d4d6245b6fecf88728e90eece00e00d554e1b0c445557d83"}, - {file = "aiohttp-3.11.8-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5a20ddaa58fea717177fac9a4a1fb8b39be868aa4fed2af6de4313b7a08f0f71"}, - {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:9f4aadfea6b48cfa17aef1a68ba6bee5a0246374f5a588e299a4f4ff5bd1c77b"}, - {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:aa7deebb4bc5143745e6282139d7b9de50beb6d06609df64d2c993ef496bc7eb"}, - {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:fe503a76b9e3a13b62e64545693c9463afe9d429e0909120f7bb66de91ed8bc2"}, - {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1c5838a68e31712354129add1b5fe32b06aa05275f835130edc650e6288af05f"}, - {file = "aiohttp-3.11.8-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:832e58d9454fe501b0d092cdf660c0e34e16005f61acd06e1c79b0fc45019c94"}, - {file = "aiohttp-3.11.8-cp310-cp310-win32.whl", hash = "sha256:00618c37a350884c08e87cf9a6532be274d564227ac49e0b474cf41f27e1f190"}, - {file = "aiohttp-3.11.8-cp310-cp310-win_amd64.whl", hash = "sha256:8eeaac75203da1a54afe1faea3c855a1973026b54929112aa9b67bceadbcb0ca"}, - {file = "aiohttp-3.11.8-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f8dd02b44555893adfe7cc4b3b454fee04f9dcec45cf66ef5bb53ebf393f0505"}, - {file = "aiohttp-3.11.8-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:658052941324edea3dee1f681375e70779f55e437e07bdfc4b5bbe65ad53cefb"}, - {file = "aiohttp-3.11.8-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:6c829471a9e2266da4a0666f8a9e215f19320f79778af379c1c7db324ac24ed2"}, - {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d21951756690f5d86d0215da38eb0fd65def03b5e2a1c08a4a39718a6d0d48f2"}, - {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2fa50ddc6b21cc1ae23e13524d6f75b27e279fdf5cf905b2df6fd171891ac4e2"}, - {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2a5afbd805e449048ecebb1a256176e953d4ca9e48bab387d4d1c8524f1c7a95"}, - {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ea68db69f2a4ddc24b28b8e754fc0b963ed7f9b9a76137f06fe44643d6821fbd"}, - {file = "aiohttp-3.11.8-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:80b3ac163145660ce660aed2f1005e6d4de840d39728990b7250525eeec4e4a8"}, - {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9ac0cce897904b77e109e5403ed713187dbdf96832bfd061ac07164264be16c"}, - {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3260c77cff4e35245bc517658bd54d7a64787f71f3c4f723877c82f22835b032"}, - {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:f7fd9c11ffad6b022bf02a41a70418cb2ab3b33f2c27842a5999e3ab78daf280"}, - {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:16bda233a7b159ab08107e8858fedca90a9de287057fab54cafde51bd83f9819"}, - {file = "aiohttp-3.11.8-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4867008617bbf86e9fb5b00f72dd0e3a00a579b32233caff834320867f9b7cac"}, - {file = "aiohttp-3.11.8-cp311-cp311-win32.whl", hash = "sha256:17e6b9d8e29e3bfc7f893f327e92c9769d3582cee2fb1652c1431ac3f60115a0"}, - {file = "aiohttp-3.11.8-cp311-cp311-win_amd64.whl", hash = "sha256:7f3be4961a5c2c670f31caab7641a37ea2a97031f0d8ae15bcfd36b6bf273200"}, - {file = "aiohttp-3.11.8-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:0e3b5bfef913d6be270c81976fbc0cbf66625cd92663bbb7e03b3adbd6aa4ac6"}, - {file = "aiohttp-3.11.8-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:cb51a81cb637b9a072c9cfae1839e35c6579638861eb3479eb5d6e6ce8bc6782"}, - {file = "aiohttp-3.11.8-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd2ca84e5f7a35f313a62eb7d6a50bac6760b60bafce34586750712731c0aeff"}, - {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:47c6663df9446aa848b478413219600da4b54bc0409e1ac4bc80fb1a81501363"}, - {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c665ed4b52256614858b20711bbbd2755b0e19ec86870f8ff1645acf9ae9e760"}, - {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35d4545e7684da7a954ffc2dce495462cb16a902dffdebe98572408f6aaaee83"}, - {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85be3899e6860dd2cd3f4370ded6708e939d00d5ec922a8eb328d114db605a47"}, - {file = "aiohttp-3.11.8-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a0ed9f1f2697713c48efc9ec483ad5d062e4aa91854f090a3eba0b19c002851d"}, - {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:c0dbae99737badf3f5e862088a118e28d3b36f03eb608a6382eddfd68178e05b"}, - {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:beae08f900b2980af4353a0200eb162b39f276fd8a6e43079a540f83964671f4"}, - {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:d6f9e5fd1b3ecbaca3e04a15a02d1fa213248608caee99fd5bdddd4759959cf7"}, - {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:a7def89a41fe32120d89cd4577f5efbab3c52234c5890066ced8a2f7202dff88"}, - {file = "aiohttp-3.11.8-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:98f596cf59292e779bc387f22378a3d2c5e052c9fe2bf822ac4f547c6fe57758"}, - {file = "aiohttp-3.11.8-cp312-cp312-win32.whl", hash = "sha256:b64fa6b76b35b695cd3e5c42a4e568cbea8d41c9e59165e2a43da00976e2027e"}, - {file = "aiohttp-3.11.8-cp312-cp312-win_amd64.whl", hash = "sha256:afba47981ff73b1794c00dce774334dcfe62664b3b4f78f278b77d21ce9daf43"}, - {file = "aiohttp-3.11.8-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:a81525430da5ca356fae6e889daeb6f5cc0d5f0cef88e59cdde48e2394ea1365"}, - {file = "aiohttp-3.11.8-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:7565689e86a88c1d258351ebd14e343337b76a56ca5c0a2c1db96ec28149386f"}, - {file = "aiohttp-3.11.8-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d0f9dbe9763c014c408ad51a027dc9582518e992dc63e2ffe359ac1b4840a560"}, - {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca580edc3ccd7f6ea76ad9cf59f5a8756d338e770b5eda7be26bcda8fa7ef53"}, - {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7d141631a7348038fc7b5d1a81b3c9afa9aa056188ded7902fe754028fdea5c5"}, - {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64e6b14608a56a4c76c60daac730b0c0eeaf9d10dfc3231f7fc26521a0d628fd"}, - {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0983d0ce329f2f9dbeb355c3744bd6333f34e0dc56025b6b7d4f285b90acb51e"}, - {file = "aiohttp-3.11.8-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d96b93a46a3742880fa21bcb35c6c40cf27714ec0fb8ec85fe444d73b95131b9"}, - {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f4f1779c3142d913c509c2ed1de8b8f920e07a5cd65ac1f57c61cfb6bfded5a4"}, - {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:48be7cff468c9c0d86a02e6a826e1fe159094b16d5aa2c17703e7317f791b0f9"}, - {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:daea456b79ca2bacc7f062845bbb1139c3b3231fc83169da5a682cf385416dd1"}, - {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:c92e763cf641e10ad9342597d20060ba23de5e411aada96660e679e3f9371189"}, - {file = "aiohttp-3.11.8-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:a750ee5a177e0f873d6b2d7d0fa6e1e7c658fc0ca8ea56438dcba2ac94bedb09"}, - {file = "aiohttp-3.11.8-cp313-cp313-win32.whl", hash = "sha256:4448c9c7f77bad48a6569062c0c16deb77fbb7363de1dc71ed087f66fb3b3c96"}, - {file = "aiohttp-3.11.8-cp313-cp313-win_amd64.whl", hash = "sha256:481075a1949de79a8a6841e0086f2f5f464785c592cf527ed0db2c0cbd0e1ba2"}, - {file = "aiohttp-3.11.8-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:72779bfb34d6d6b51e55a7f4901b410e416b5431738b367d49696928c91a2ca8"}, - {file = "aiohttp-3.11.8-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:3e6523f39071a01757048985e4cc22d04aa130bc40d9128503f3a61a3ee98328"}, - {file = "aiohttp-3.11.8-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:220bbce18b3046973465be45415430f1cab39d7fdc40cbcf0a8c05485c6902fe"}, - {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:336bbf7a33dd8cb4a7afb98c70e9935a81e5e88f7ac595ba2e84b1fb5da190d6"}, - {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3c5e4f1ba5059b85e05c551961a448ce2689c6249ed6a2e2174796842c191d10"}, - {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9f9fd5c672c962389429abd11ed32c9c93f7932fd58584cae1e43951b141c6b"}, - {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:58bd94ad48143e1d42e05fc055da41de0a9933f378ad87760595b8aec83d317b"}, - {file = "aiohttp-3.11.8-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9bf52642b12d70d78c18882915201bc5345f7c8f0f2ab8919d99b886aa6475a7"}, - {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:fee12d8487b0df2b683424cca2a0d8fb7281d5607518d742e98119a74af01026"}, - {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:65fd04f1fea668ad1af48ac31b752000e222dccffedcad3de8ccf9d34489ccd3"}, - {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:c3f397e0511a0ec4fe331e602fc057dfd336d352062deb9969ebd81e253a149c"}, - {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:cf8f05f4abe3288fe2e106e1461fd20d8abf6103886ddfb6d746a5b8fb830d2b"}, - {file = "aiohttp-3.11.8-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:7d71d4ac0792ff89541179394d303be846a0b6cd3821ae67286ee69ecec16f9f"}, - {file = "aiohttp-3.11.8-cp39-cp39-win32.whl", hash = "sha256:2b6f8716044ae5e5f2a3b4e4b6bfee48e97c8b2a92e56f43aadd728c7fd26b7d"}, - {file = "aiohttp-3.11.8-cp39-cp39-win_amd64.whl", hash = "sha256:da343903214bf9f9d314b913caa499fa19e26d73e6e23a3db7d4898ea6d47028"}, - {file = "aiohttp-3.11.8.tar.gz", hash = "sha256:7bc9d64a2350cbb29a9732334e1a0743cbb6844de1731cbdf5949b235653f3fd"}, + {file = "aiohttp-3.11.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0411777249f25d11bd2964a230b3ffafcbed6cd65d0f2b132bc2b8f5b8c347c7"}, + {file = "aiohttp-3.11.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:499368eb904566fbdf1a3836a1532000ef1308f34a1bcbf36e6351904cced771"}, + {file = "aiohttp-3.11.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b5a5009b0159a8f707879dc102b139466d8ec6db05103ec1520394fdd8ea02c"}, + {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:176f8bb8931da0613bb0ed16326d01330066bb1e172dd97e1e02b1c27383277b"}, + {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6435a66957cdba1a0b16f368bde03ce9c79c57306b39510da6ae5312a1a5b2c1"}, + {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:202f40fb686e5f93908eee0c75d1e6fbe50a43e9bd4909bf3bf4a56b560ca180"}, + {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39625703540feb50b6b7f938b3856d1f4886d2e585d88274e62b1bd273fae09b"}, + {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6beeac698671baa558e82fa160be9761cf0eb25861943f4689ecf9000f8ebd0"}, + {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:96726839a42429318017e67a42cca75d4f0d5248a809b3cc2e125445edd7d50d"}, + {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3f5461c77649358610fb9694e790956b4238ac5d9e697a17f63619c096469afe"}, + {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4313f3bc901255b22f01663eeeae167468264fdae0d32c25fc631d5d6e15b502"}, + {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d6e274661c74195708fc4380a4ef64298926c5a50bb10fbae3d01627d7a075b7"}, + {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db2914de2559809fdbcf3e48f41b17a493b58cb7988d3e211f6b63126c55fe82"}, + {file = "aiohttp-3.11.9-cp310-cp310-win32.whl", hash = "sha256:27935716f8d62c1c73010428db310fd10136002cfc6d52b0ba7bdfa752d26066"}, + {file = "aiohttp-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:afbe85b50ade42ddff5669947afde9e8a610e64d2c80be046d67ec4368e555fa"}, + {file = "aiohttp-3.11.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:afcda759a69c6a8be3aae764ec6733155aa4a5ad9aad4f398b52ba4037942fe3"}, + {file = "aiohttp-3.11.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5bba6b83fde4ca233cfda04cbd4685ab88696b0c8eaf76f7148969eab5e248a"}, + {file = "aiohttp-3.11.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:442356e8924fe1a121f8c87866b0ecdc785757fd28924b17c20493961b3d6697"}, + {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f737fef6e117856400afee4f17774cdea392b28ecf058833f5eca368a18cf1bf"}, + {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea142255d4901b03f89cb6a94411ecec117786a76fc9ab043af8f51dd50b5313"}, + {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1e9e447856e9b7b3d38e1316ae9a8c92e7536ef48373de758ea055edfd5db5"}, + {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7f6173302f8a329ca5d1ee592af9e628d3ade87816e9958dcf7cdae2841def7"}, + {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c6147c6306f537cff59409609508a1d2eff81199f0302dd456bb9e7ea50c39"}, + {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9d036a9a41fc78e8a3f10a86c2fc1098fca8fab8715ba9eb999ce4788d35df0"}, + {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2ac9fd83096df36728da8e2f4488ac3b5602238f602706606f3702f07a13a409"}, + {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3108f0ad5c6b6d78eec5273219a5bbd884b4aacec17883ceefaac988850ce6e"}, + {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:96bbec47beb131bbf4bae05d8ef99ad9e5738f12717cfbbf16648b78b0232e87"}, + {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fc726c3fa8f606d07bd2b500e5dc4c0fd664c59be7788a16b9e34352c50b6b6b"}, + {file = "aiohttp-3.11.9-cp311-cp311-win32.whl", hash = "sha256:5720ebbc7a1b46c33a42d489d25d36c64c419f52159485e55589fbec648ea49a"}, + {file = "aiohttp-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:17af09d963fa1acd7e4c280e9354aeafd9e3d47eaa4a6bfbd2171ad7da49f0c5"}, + {file = "aiohttp-3.11.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c1f2d7fd583fc79c240094b3e7237d88493814d4b300d013a42726c35a734bc9"}, + {file = "aiohttp-3.11.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4b8a1b6c7a68c73191f2ebd3bf66f7ce02f9c374e309bdb68ba886bbbf1b938"}, + {file = "aiohttp-3.11.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd3f711f4c99da0091ced41dccdc1bcf8be0281dc314d6d9c6b6cf5df66f37a9"}, + {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44cb1a1326a0264480a789e6100dc3e07122eb8cd1ad6b784a3d47d13ed1d89c"}, + {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a7ddf981a0b953ade1c2379052d47ccda2f58ab678fca0671c7c7ca2f67aac2"}, + {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ffa45cc55b18d4ac1396d1ddb029f139b1d3480f1594130e62bceadf2e1a838"}, + {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cca505829cdab58c2495ff418c96092d225a1bbd486f79017f6de915580d3c44"}, + {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44d323aa80a867cb6db6bebb4bbec677c6478e38128847f2c6b0f70eae984d72"}, + {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b2fab23003c4bb2249729a7290a76c1dda38c438300fdf97d4e42bf78b19c810"}, + {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:be0c7c98e38a1e3ad7a6ff64af8b6d6db34bf5a41b1478e24c3c74d9e7f8ed42"}, + {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5cc5e0d069c56645446c45a4b5010d4b33ac6c5ebfd369a791b5f097e46a3c08"}, + {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9bcf97b971289be69638d8b1b616f7e557e1342debc7fc86cf89d3f08960e411"}, + {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c7333e7239415076d1418dbfb7fa4df48f3a5b00f8fdf854fca549080455bc14"}, + {file = "aiohttp-3.11.9-cp312-cp312-win32.whl", hash = "sha256:9384b07cfd3045b37b05ed002d1c255db02fb96506ad65f0f9b776b762a7572e"}, + {file = "aiohttp-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:f5252ba8b43906f206048fa569debf2cd0da0316e8d5b4d25abe53307f573941"}, + {file = "aiohttp-3.11.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:282e0a7ddd36ebc411f156aeaa0491e8fe7f030e2a95da532cf0c84b0b70bc66"}, + {file = "aiohttp-3.11.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebd3e6b0c7d4954cca59d241970011f8d3327633d555051c430bd09ff49dc494"}, + {file = "aiohttp-3.11.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30f9f89ae625d412043f12ca3771b2ccec227cc93b93bb1f994db6e1af40a7d3"}, + {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a3b5b2c012d70c63d9d13c57ed1603709a4d9d7d473e4a9dfece0e4ea3d5f51"}, + {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ef1550bb5f55f71b97a6a395286db07f7f2c01c8890e613556df9a51da91e8d"}, + {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317251b9c9a2f1a9ff9cd093775b34c6861d1d7df9439ce3d32a88c275c995cd"}, + {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cbe97839b009826a61b143d3ca4964c8590d7aed33d6118125e5b71691ca46"}, + {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:618b18c3a2360ac940a5503da14fa4f880c5b9bc315ec20a830357bcc62e6bae"}, + {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0cf4d814689e58f57ecd5d8c523e6538417ca2e72ff52c007c64065cef50fb2"}, + {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:15c4e489942d987d5dac0ba39e5772dcbed4cc9ae3710d1025d5ba95e4a5349c"}, + {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ec8df0ff5a911c6d21957a9182402aad7bf060eaeffd77c9ea1c16aecab5adbf"}, + {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ed95d66745f53e129e935ad726167d3a6cb18c5d33df3165974d54742c373868"}, + {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:647ec5bee7e4ec9f1034ab48173b5fa970d9a991e565549b965e93331f1328fe"}, + {file = "aiohttp-3.11.9-cp313-cp313-win32.whl", hash = "sha256:ef2c9499b7bd1e24e473dc1a85de55d72fd084eea3d8bdeec7ee0720decb54fa"}, + {file = "aiohttp-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:84de955314aa5e8d469b00b14d6d714b008087a0222b0f743e7ffac34ef56aff"}, + {file = "aiohttp-3.11.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e738aabff3586091221044b7a584865ddc4d6120346d12e28e788307cd731043"}, + {file = "aiohttp-3.11.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28f29bce89c3b401a53d6fd4bee401ee943083bf2bdc12ef297c1d63155070b0"}, + {file = "aiohttp-3.11.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31de2f10f63f96cc19e04bd2df9549559beadd0b2ee2da24a17e7ed877ca8c60"}, + {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f31cebd8c27a36af6c7346055ac564946e562080ee1a838da724585c67474f"}, + {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bcb7f6976dc0b6b56efde13294862adf68dd48854111b422a336fa729a82ea6"}, + {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8b13b9950d8b2f8f58b6e5842c4b842b5887e2c32e3f4644d6642f1659a530"}, + {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9c23e62f3545c2216100603614f9e019e41b9403c47dd85b8e7e5015bf1bde0"}, + {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec656680fc53a13f849c71afd0c84a55c536206d524cbc831cde80abbe80489e"}, + {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:36df00e0541f264ce42d62280281541a47474dfda500bc5b7f24f70a7f87be7a"}, + {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8dcfd14c712aa9dd18049280bfb2f95700ff6a8bde645e09f17c3ed3f05a0130"}, + {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14624d96f0d69cf451deed3173079a68c322279be6030208b045ab77e1e8d550"}, + {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4b01d9cfcb616eeb6d40f02e66bebfe7b06d9f2ef81641fdd50b8dd981166e0b"}, + {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:928f92f80e2e8d6567b87d3316c1fd9860ccfe36e87a9a7f5237d4cda8baa1ba"}, + {file = "aiohttp-3.11.9-cp39-cp39-win32.whl", hash = "sha256:c8a02f74ae419e3955af60f570d83187423e42e672a6433c5e292f1d23619269"}, + {file = "aiohttp-3.11.9-cp39-cp39-win_amd64.whl", hash = "sha256:0a97d657f6cf8782a830bb476c13f7d777cfcab8428ac49dde15c22babceb361"}, + {file = "aiohttp-3.11.9.tar.gz", hash = "sha256:a9266644064779840feec0e34f10a89b3ff1d2d6b751fe90017abcad1864fa7c"}, ] [package.dependencies] @@ -188,21 +188,18 @@ wrapt = [ [[package]] name = "asttokens" -version = "2.4.1" +version = "3.0.0" description = "Annotate AST trees with source code positions" optional = false -python-versions = "*" +python-versions = ">=3.8" files = [ - {file = "asttokens-2.4.1-py2.py3-none-any.whl", hash = "sha256:051ed49c3dcae8913ea7cd08e46a606dba30b79993209636c4875bc1d637bc24"}, - {file = "asttokens-2.4.1.tar.gz", hash = "sha256:b03869718ba9a6eb027e134bfdf69f38a236d681c83c160d510768af11254ba0"}, + {file = "asttokens-3.0.0-py3-none-any.whl", hash = "sha256:e3078351a059199dd5138cb1c706e6430c05eff2ff136af5eb4790f9d28932e2"}, + {file = "asttokens-3.0.0.tar.gz", hash = "sha256:0dcd8baa8d62b0c1d118b399b2ddba3c4aff271d0d7a9e0d4c1681c79035bbc7"}, ] -[package.dependencies] -six = ">=1.12.0" - [package.extras] -astroid = ["astroid (>=1,<2)", "astroid (>=2,<4)"] -test = ["astroid (>=1,<2)", "astroid (>=2,<4)", "pytest"] +astroid = ["astroid (>=2,<4)"] +test = ["astroid (>=2,<4)", "pytest", "pytest-cov", "pytest-xdist"] [[package]] name = "async-timeout" @@ -793,59 +790,56 @@ files = [ [[package]] name = "deepsearch-glm" -version = "0.26.1" +version = "0.26.2" description = "Graph Language Models" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "deepsearch_glm-0.26.1-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:477a8783782416ddc9f2562b2e85aabb3dae15620fc92a065c50ac9c8a4f1a49"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:33cf8dbf5d1c748d3060026a8c451162a822c138c538e74b4ca421feaa757957"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:20f3721194ebf5919a722809759ece53866eae2fc2a0c2b69bb0e9a4602efe09"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:be8e4b790db4b1e178a92a793dededdf59209a577e7187968b084200604dac4e"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:878e8e6fd6440a8dc0db7415e37b5710fee912755bccd23b37a6456a9707ece3"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a6755a00ff2d512fc5c7bbc8e84d6a3149c1e30df4074d46bca84ae24072535c"}, - {file = "deepsearch_glm-0.26.1-cp310-cp310-win_amd64.whl", hash = "sha256:5b619b2965306972a0a3057b7785452282ecfd656724b4ce0c62c1d659bd5f0a"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:dcd89e19cd6ef0f23e87606e3e45342e3ded65d958a1ca324b524147e27dfe18"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:658d0c53b5a06a60917f4acccbcbca81eac0dd938fe1f601184b4d30634040ca"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:5ef920528c215ae0586efb880e886fbd388b490c64b17e64b2a6806a7a7c97da"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:934b59504224eda6de2607ce3a7c22c982c12320f99f773421a2083efc9ee80c"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d66db72509b9b861bd8caa9629713984c360f28c83df990a4bb20370ba9584f"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de15bf1191837248b6e90b530e17525333142b6f59153092eba87446f7472a00"}, - {file = "deepsearch_glm-0.26.1-cp311-cp311-win_amd64.whl", hash = "sha256:7efb1cc1e7bc7e01b9d3fd9a38dcc7a34300c81c8c845b9f3cde2a7cbb8f7153"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:aee9f9e2f1d3da996faa289bfbdaef1f66c9e85b1d3a017230ac38eaf8cf24f8"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:17835432e33f9b4f953091cefb4cd7f0ec18bef22bf657135d95040dff51f475"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:ae6ec456e6c3c36a6f8e1607488fba00638a451ab2e0819fd6718c0ddd9e2973"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:8896954e8b0c4a48d99c041119c191359506f92b2868767ede9303765b91d10e"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0859596d97ed77334c5cee703fd5ce29b1c500a88f4ab5b12b0e421ae3ba7176"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:350a96fd75a0a230934ba26cec543b6e507279a5c2aeedceabc9a1016546bef8"}, - {file = "deepsearch_glm-0.26.1-cp312-cp312-win_amd64.whl", hash = "sha256:334ca76b798d223fc511af4f5a4f50b6e2279472ed57abe1bd13bc7808cda475"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:25436ef7e74fb79356e49c8dd7bdde96544b03dafbda463fece7dfa3a8b8cb2a"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:db29c65004737eb70d8200fb97c1bd5f88bcba900ace2e330b285d9f4f97e1d3"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:973f247b41f08477fbaa26675d65f60fd4decf27239f62739027503c53510283"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:da90c145185ee7309fc938a2be33ff49166be0f1a4d84f00c796442ef71ae1b4"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09fede1e2e1df7d77f8f63898e1a5180bd43a623898b2b229561778a00ba99e9"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c32ee40a2c4c13407e702bdc75b8a00a8ffeb45d0c966d0bb58deaf1f42b6b95"}, - {file = "deepsearch_glm-0.26.1-cp313-cp313-win_amd64.whl", hash = "sha256:5ad5c2b6fde9a15c10785a246b4e6f2b6fa88c7824fa619eb36b526f55a9049c"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:ad7504151931f238d5f724761b1d6d9ac0aeb8c5c8d9c41f0b238243f41ac75e"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:5f20628d1eb46586068459f2a3f898a97204887020281d4474e02525b9fbdb2c"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:9f761bcfeac2b47001b4c9ea7d321d9ed2036c5ae87537031fdd6e74cd99890d"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:67f16e696ebee7e5c414d9142880783f53a89643c76b1a53e2c65aaed44868ec"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2f1c0b5acdc792d5e806cff3989b514509f988d53b6a493d18c2a32f5e553f30"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3131efd1cd015e883cf95779a0efd8233563b5a4e79516ab97cb2f6af2d07f45"}, - {file = "deepsearch_glm-0.26.1-cp39-cp39-win_amd64.whl", hash = "sha256:3a9a47e6558733c66f88b3ff29417ce5ea89e6194e713e9acc93a37b8b763c35"}, - {file = "deepsearch_glm-0.26.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:84e10279d43bc62233ab67dcf831334303a39d55f4c6c308936e70bb9b6797c7"}, - {file = "deepsearch_glm-0.26.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:9e161df0771e1c5fafa16a5e081c9df83556f887a5d6dfd11ffe8a775bf21670"}, - {file = "deepsearch_glm-0.26.1.tar.gz", hash = "sha256:c2938e99c4f9f48a8686d3c357778645ec76a78781c89d955720ef78502da830"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-macosx_13_0_arm64.whl", hash = "sha256:00453a02bc8df959da576bc598ba528b394a9c016d6a428efc948c867be98938"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-macosx_13_0_x86_64.whl", hash = "sha256:9e6f654ab4d9dc3e6e2033c9c45294c36e5e62650cac0e4a650af576364eb370"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:1fdf2fce9d642bbc5222600a1b280a7413aa640ed01acee13d43401ec27d6ad5"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:218cab085a58b88c55dbeb80cc5f5f7b3c5a96c8537eb2ada8e5cab70cd8e439"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:75be007e62d11780f2433b213dad14d14a270c3607e909fd1fc95efdf02446c6"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8a9b34c6cfb8b873ccf6e0072f5434c0c65a1d90652a6b901becc5b3b1695106"}, + {file = "deepsearch_glm-0.26.2-cp310-cp310-win_amd64.whl", hash = "sha256:f4b63c6e1d4a7be597efbe96052286bca805784cd7283a037919c349971051c5"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-macosx_13_0_arm64.whl", hash = "sha256:eaabedca45fdd87dc455dc08b1785db15ba5ea6b706820330447f2cf7f03a67a"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-macosx_13_0_x86_64.whl", hash = "sha256:101bc2a79027df555050d08112717249916c4d82ad5815be2a1ac0581d9ab2b5"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:000d4a4895c4ff89c465b746bb7db3bb054a1fb5c3fabe2772d5431700c15d33"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:2d97f9ebdff1a9086cc32ddd0abb14b42c4b4b2ae666986078fd77db3aa4487d"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:666a3b53b0949735cff77a8209f2833866e34b635ca0c7f444807963d8379d93"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aae1ec83222ef39e045f0186023473e5ce2ed30846c13f2943192d34d57c0f"}, + {file = "deepsearch_glm-0.26.2-cp311-cp311-win_amd64.whl", hash = "sha256:9bb173dcd0caef1d8a0d440e1ac3e9959c6b849e06b95b1d9b436661504c98f7"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-macosx_13_0_arm64.whl", hash = "sha256:bb286be157a7b163b46a4d1f7e48a30d5cc365d4926c18e8b3c72994a8f296f7"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-macosx_13_0_x86_64.whl", hash = "sha256:defca9ecf1451ce3422b7783ea188571ffad7c941dbf52acc2638c5a4ffa7743"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:226f8862c616a4def202a6d0f71eb5d8e9f6ddbded2cf431c146150303888cf8"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:6ff0fe662254835763ad7d3edc2db320de8d233f645064e0356187d8e1fabe3b"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:91c1b84ec5b1308de37c660f49570ee1e72bd7f0f607566344446b9293f1183c"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d634eeaae8943e1912c0dfbf3193e09bea8c1aac38db8a6fa1f03fe6a49cb84"}, + {file = "deepsearch_glm-0.26.2-cp312-cp312-win_amd64.whl", hash = "sha256:9294087d26037574817e8e1710e387fd9ef9ba4328705de86dd40d819f32909a"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-macosx_13_0_arm64.whl", hash = "sha256:df7181143c62a1f0e166bc9ffb25deab617b53ba7c468284e3072b861c17405a"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-macosx_13_0_x86_64.whl", hash = "sha256:2c3fef2c8394d6dc22d1bcdab12d0f46df9b411c5431dfb585a2c7bb128e1744"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-macosx_14_0_arm64.whl", hash = "sha256:f641a88421aa806ccef8f8e657fbb65135f59732110d21b5103c09138a659315"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-macosx_14_0_x86_64.whl", hash = "sha256:cf78499892caffb4bdc020b8c50ab7d623f568478375dcc2e3ec107d40972adc"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a72f2b432b81b0bc7c87e33c41a97c7a8da2536dd2b337eb1b7d054fba12d556"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4703cae0d329b77e1d97892910313035204daa026d6e67ce6eb1b3e74e41f93e"}, + {file = "deepsearch_glm-0.26.2-cp313-cp313-win_amd64.whl", hash = "sha256:c906c75d080414490727de416fd1782bc6a10301378f72a741aa227b183832cf"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-macosx_13_0_arm64.whl", hash = "sha256:10a366512540eff9f76645eb521df3469a160e8460ff6c3c1bfe172342c6c670"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-macosx_13_0_x86_64.whl", hash = "sha256:304988f1e08bd86a8a7b7cc0495e38faf586231f33f05c1023597c6177758572"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:c8f69b877846031648811ff80070b90b834bf9e4cdd74e5c2d93c7e18f408cd1"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:1ba12361d1e4b8b02a72f515028f22686d98526a703a1091f89e9487fa3aa3c7"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c03bb8b3cdb2952c9c269849830f7830fa7e0384b76809e25f4c2d5d091f746c"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2fe719b26d7cfcf5632a56be1f1420920fcdbea4418c014dd6e7e218dd2aca11"}, + {file = "deepsearch_glm-0.26.2-cp39-cp39-win_amd64.whl", hash = "sha256:2b31fa419287af3429efc2d5610cbf2428bafc762e45b610a48ad30dffedaa9e"}, + {file = "deepsearch_glm-0.26.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:6df2504998e60c1aac3655820ad25e5eccca137da2e9f78fb53dc0fd0d1cdbf4"}, + {file = "deepsearch_glm-0.26.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e1b4a789ec9555ec9f4ff6730d68081be37eaa43cb51c9463962967c9f672684"}, + {file = "deepsearch_glm-0.26.2.tar.gz", hash = "sha256:7a607e78903b66d28beac3408156c11ab7b34ee70e8ccd0d292b28433e5a9c1d"}, ] [package.dependencies] docling-core = ">=2.0,<3.0" docutils = "!=0.21" -numpy = [ - {version = ">=1.26.4,<2.0.0", markers = "python_version >= \"3.9\" and python_version < \"3.13\""}, - {version = ">=2.0.2,<3.0.0", markers = "python_version >= \"3.13\""}, -] -pandas = {version = ">=2.1.4,<3.0.0", markers = "python_version >= \"3.9\""} +numpy = ">=1.24.4,<3.0.0" +pandas = ">=1.5.1,<3.0.0" python-dotenv = ">=1.0.0,<2.0.0" pywin32 = {version = ">=307,<308", markers = "sys_platform == \"win32\""} requests = ">=2.32.3,<3.0.0" @@ -917,22 +911,19 @@ typing-extensions = ">=4.12.2,<5.0.0" [[package]] name = "docling-ibm-models" -version = "2.0.6" +version = "2.0.7" description = "This package contains the AI models used by the Docling PDF conversion package" optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_ibm_models-2.0.6-py3-none-any.whl", hash = "sha256:1702b413353d18089511cb73fc325606eb3601b1406b1367a7c5070081f44af2"}, - {file = "docling_ibm_models-2.0.6.tar.gz", hash = "sha256:b06bb8e426c8d53cb300b17a432120917a335390665302d82f311a3647ee1bca"}, + {file = "docling_ibm_models-2.0.7-py3-none-any.whl", hash = "sha256:bf362add22e9c526ac56c04bce412d7bb1c331b44a73204abba0b1d90a500c78"}, + {file = "docling_ibm_models-2.0.7.tar.gz", hash = "sha256:e1372c4f2517d522125fb02a820558f01914926f532bcd0534f1028a25d63667"}, ] [package.dependencies] huggingface_hub = ">=0.23,<1" jsonlines = ">=3.1.0,<4.0.0" -numpy = [ - {version = ">=1.24.4,<2.0.0", markers = "python_version < \"3.13\""}, - {version = ">=2.1.0,<3.0.0", markers = "python_version >= \"3.13\""}, -] +numpy = ">=1.24.4,<3.0.0" opencv-python-headless = ">=4.6.0.66,<5.0.0.0" Pillow = ">=10.0.0,<11.0.0" torch = ">=2.2.2,<3.0.0" @@ -1091,13 +1082,13 @@ tests = ["asttokens (>=2.1.0)", "coverage", "coverage-enable-subprocess", "ipyth [[package]] name = "fastjsonschema" -version = "2.21.0" +version = "2.21.1" description = "Fastest Python implementation of JSON schema" optional = false python-versions = "*" files = [ - {file = "fastjsonschema-2.21.0-py3-none-any.whl", hash = "sha256:5b23b8e7c9c6adc0ecb91c03a0768cb48cd154d9159378a69c8318532e0b5cbf"}, - {file = "fastjsonschema-2.21.0.tar.gz", hash = "sha256:a02026bbbedc83729da3bfff215564b71902757f33f60089f1abae193daa4771"}, + {file = "fastjsonschema-2.21.1-py3-none-any.whl", hash = "sha256:c9e5b7e908310918cf494a434eeb31384dd84a98b57a30bcb1f535015b554667"}, + {file = "fastjsonschema-2.21.1.tar.gz", hash = "sha256:794d4f0a58f848961ba16af7b9c85a3e88cd360df008c59aac6fc5ae9323b5d4"}, ] [package.extras] @@ -2738,13 +2729,13 @@ pygments = ">2.12.0" [[package]] name = "mkdocs-material" -version = "9.5.46" +version = "9.5.47" description = "Documentation that simply works" optional = false python-versions = ">=3.8" files = [ - {file = "mkdocs_material-9.5.46-py3-none-any.whl", hash = "sha256:98f0a2039c62e551a68aad0791a8d41324ff90c03a6e6cea381a384b84908b83"}, - {file = "mkdocs_material-9.5.46.tar.gz", hash = "sha256:ae2043f4238e572f9a40e0b577f50400d6fc31e2fef8ea141800aebf3bd273d7"}, + {file = "mkdocs_material-9.5.47-py3-none-any.whl", hash = "sha256:53fb9c9624e7865da6ec807d116cd7be24b3cb36ab31b1d1d1a9af58c56009a2"}, + {file = "mkdocs_material-9.5.47.tar.gz", hash = "sha256:fc3b7a8e00ad896660bd3a5cc12ca0cb28bdc2bcbe2a946b5714c23ac91b0ede"}, ] [package.dependencies] @@ -3201,7 +3192,6 @@ files = [ {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00810cd5275f5c3f44b9eb0e521d1a841ee2f8023622de39ffc7d88bd533d8e0"}, {file = "nh3-0.2.19-cp38-abi3-win32.whl", hash = "sha256:7e98621856b0a911c21faa5eef8f8ea3e691526c2433f9afc2be713cb6fbdb48"}, {file = "nh3-0.2.19-cp38-abi3-win_amd64.whl", hash = "sha256:75c7cafb840f24430b009f7368945cb5ca88b2b54bb384ebfba495f16bc9c121"}, - {file = "nh3-0.2.19.tar.gz", hash = "sha256:790056b54c068ff8dceb443eaefb696b84beff58cca6c07afd754d17692a4804"}, ] [[package]] @@ -3246,47 +3236,56 @@ files = [ [[package]] name = "numpy" -version = "1.26.4" +version = "2.0.2" description = "Fundamental package for array computing in Python" optional = false python-versions = ">=3.9" files = [ - {file = "numpy-1.26.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:9ff0f4f29c51e2803569d7a51c2304de5554655a60c5d776e35b4a41413830d0"}, - {file = "numpy-1.26.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:2e4ee3380d6de9c9ec04745830fd9e2eccb3e6cf790d39d7b98ffd19b0dd754a"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d209d8969599b27ad20994c8e41936ee0964e6da07478d6c35016bc386b66ad4"}, - {file = "numpy-1.26.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffa75af20b44f8dba823498024771d5ac50620e6915abac414251bd971b4529f"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:62b8e4b1e28009ef2846b4c7852046736bab361f7aeadeb6a5b89ebec3c7055a"}, - {file = "numpy-1.26.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a4abb4f9001ad2858e7ac189089c42178fcce737e4169dc61321660f1a96c7d2"}, - {file = "numpy-1.26.4-cp310-cp310-win32.whl", hash = "sha256:bfe25acf8b437eb2a8b2d49d443800a5f18508cd811fea3181723922a8a82b07"}, - {file = "numpy-1.26.4-cp310-cp310-win_amd64.whl", hash = "sha256:b97fe8060236edf3662adfc2c633f56a08ae30560c56310562cb4f95500022d5"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c66707fabe114439db9068ee468c26bbdf909cac0fb58686a42a24de1760c71"}, - {file = "numpy-1.26.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:edd8b5fe47dab091176d21bb6de568acdd906d1887a4584a15a9a96a1dca06ef"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7ab55401287bfec946ced39700c053796e7cc0e3acbef09993a9ad2adba6ca6e"}, - {file = "numpy-1.26.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:666dbfb6ec68962c033a450943ded891bed2d54e6755e35e5835d63f4f6931d5"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:96ff0b2ad353d8f990b63294c8986f1ec3cb19d749234014f4e7eb0112ceba5a"}, - {file = "numpy-1.26.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:60dedbb91afcbfdc9bc0b1f3f402804070deed7392c23eb7a7f07fa857868e8a"}, - {file = "numpy-1.26.4-cp311-cp311-win32.whl", hash = "sha256:1af303d6b2210eb850fcf03064d364652b7120803a0b872f5211f5234b399f20"}, - {file = "numpy-1.26.4-cp311-cp311-win_amd64.whl", hash = "sha256:cd25bcecc4974d09257ffcd1f098ee778f7834c3ad767fe5db785be9a4aa9cb2"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b3ce300f3644fb06443ee2222c2201dd3a89ea6040541412b8fa189341847218"}, - {file = "numpy-1.26.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:03a8c78d01d9781b28a6989f6fa1bb2c4f2d51201cf99d3dd875df6fbd96b23b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9fad7dcb1aac3c7f0584a5a8133e3a43eeb2fe127f47e3632d43d677c66c102b"}, - {file = "numpy-1.26.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:675d61ffbfa78604709862923189bad94014bef562cc35cf61d3a07bba02a7ed"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ab47dbe5cc8210f55aa58e4805fe224dac469cde56b9f731a4c098b91917159a"}, - {file = "numpy-1.26.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:1dda2e7b4ec9dd512f84935c5f126c8bd8b9f2fc001e9f54af255e8c5f16b0e0"}, - {file = "numpy-1.26.4-cp312-cp312-win32.whl", hash = "sha256:50193e430acfc1346175fcbdaa28ffec49947a06918b7b92130744e81e640110"}, - {file = "numpy-1.26.4-cp312-cp312-win_amd64.whl", hash = "sha256:08beddf13648eb95f8d867350f6a018a4be2e5ad54c8d8caed89ebca558b2818"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:7349ab0fa0c429c82442a27a9673fc802ffdb7c7775fad780226cb234965e53c"}, - {file = "numpy-1.26.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:52b8b60467cd7dd1e9ed082188b4e6bb35aa5cdd01777621a1658910745b90be"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d5241e0a80d808d70546c697135da2c613f30e28251ff8307eb72ba696945764"}, - {file = "numpy-1.26.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f870204a840a60da0b12273ef34f7051e98c3b5961b61b0c2c1be6dfd64fbcd3"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:679b0076f67ecc0138fd2ede3a8fd196dddc2ad3254069bcb9faf9a79b1cebcd"}, - {file = "numpy-1.26.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:47711010ad8555514b434df65f7d7b076bb8261df1ca9bb78f53d3b2db02e95c"}, - {file = "numpy-1.26.4-cp39-cp39-win32.whl", hash = "sha256:a354325ee03388678242a4d7ebcd08b5c727033fcff3b2f536aea978e15ee9e6"}, - {file = "numpy-1.26.4-cp39-cp39-win_amd64.whl", hash = "sha256:3373d5d70a5fe74a2c1bb6d2cfd9609ecf686d47a2d7b1d37a8f3b6bf6003aea"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:afedb719a9dcfc7eaf2287b839d8198e06dcd4cb5d276a3df279231138e83d30"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:95a7476c59002f2f6c590b9b7b998306fba6a5aa646b1e22ddfeaf8f78c3a29c"}, - {file = "numpy-1.26.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:7e50d0a0cc3189f9cb0aeb3a6a6af18c16f59f004b866cd2be1c14b36134a4a0"}, - {file = "numpy-1.26.4.tar.gz", hash = "sha256:2a02aba9ed12e4ac4eb3ea9421c420301a0c6460d9830d74a9df87efa4912010"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:51129a29dbe56f9ca83438b706e2e69a39892b5eda6cedcb6b0c9fdc9b0d3ece"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f15975dfec0cf2239224d80e32c3170b1d168335eaedee69da84fbe9f1f9cd04"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_arm64.whl", hash = "sha256:8c5713284ce4e282544c68d1c3b2c7161d38c256d2eefc93c1d683cf47683e66"}, + {file = "numpy-2.0.2-cp310-cp310-macosx_14_0_x86_64.whl", hash = "sha256:becfae3ddd30736fe1889a37f1f580e245ba79a5855bff5f2a29cb3ccc22dd7b"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2da5960c3cf0df7eafefd806d4e612c5e19358de82cb3c343631188991566ccd"}, + {file = "numpy-2.0.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:496f71341824ed9f3d2fd36cf3ac57ae2e0165c143b55c3a035ee219413f3318"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:a61ec659f68ae254e4d237816e33171497e978140353c0c2038d46e63282d0c8"}, + {file = "numpy-2.0.2-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d731a1c6116ba289c1e9ee714b08a8ff882944d4ad631fd411106a30f083c326"}, + {file = "numpy-2.0.2-cp310-cp310-win32.whl", hash = "sha256:984d96121c9f9616cd33fbd0618b7f08e0cfc9600a7ee1d6fd9b239186d19d97"}, + {file = "numpy-2.0.2-cp310-cp310-win_amd64.whl", hash = "sha256:c7b0be4ef08607dd04da4092faee0b86607f111d5ae68036f16cc787e250a131"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:49ca4decb342d66018b01932139c0961a8f9ddc7589611158cb3c27cbcf76448"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:11a76c372d1d37437857280aa142086476136a8c0f373b2e648ab2c8f18fb195"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_arm64.whl", hash = "sha256:807ec44583fd708a21d4a11d94aedf2f4f3c3719035c76a2bbe1fe8e217bdc57"}, + {file = "numpy-2.0.2-cp311-cp311-macosx_14_0_x86_64.whl", hash = "sha256:8cafab480740e22f8d833acefed5cc87ce276f4ece12fdaa2e8903db2f82897a"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a15f476a45e6e5a3a79d8a14e62161d27ad897381fecfa4a09ed5322f2085669"}, + {file = "numpy-2.0.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:13e689d772146140a252c3a28501da66dfecd77490b498b168b501835041f951"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:9ea91dfb7c3d1c56a0e55657c0afb38cf1eeae4544c208dc465c3c9f3a7c09f9"}, + {file = "numpy-2.0.2-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c1c9307701fec8f3f7a1e6711f9089c06e6284b3afbbcd259f7791282d660a15"}, + {file = "numpy-2.0.2-cp311-cp311-win32.whl", hash = "sha256:a392a68bd329eafac5817e5aefeb39038c48b671afd242710b451e76090e81f4"}, + {file = "numpy-2.0.2-cp311-cp311-win_amd64.whl", hash = "sha256:286cd40ce2b7d652a6f22efdfc6d1edf879440e53e76a75955bc0c826c7e64dc"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:df55d490dea7934f330006d0f81e8551ba6010a5bf035a249ef61a94f21c500b"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:8df823f570d9adf0978347d1f926b2a867d5608f434a7cff7f7908c6570dcf5e"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_arm64.whl", hash = "sha256:9a92ae5c14811e390f3767053ff54eaee3bf84576d99a2456391401323f4ec2c"}, + {file = "numpy-2.0.2-cp312-cp312-macosx_14_0_x86_64.whl", hash = "sha256:a842d573724391493a97a62ebbb8e731f8a5dcc5d285dfc99141ca15a3302d0c"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c05e238064fc0610c840d1cf6a13bf63d7e391717d247f1bf0318172e759e692"}, + {file = "numpy-2.0.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0123ffdaa88fa4ab64835dcbde75dcdf89c453c922f18dced6e27c90d1d0ec5a"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:96a55f64139912d61de9137f11bf39a55ec8faec288c75a54f93dfd39f7eb40c"}, + {file = "numpy-2.0.2-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:ec9852fb39354b5a45a80bdab5ac02dd02b15f44b3804e9f00c556bf24b4bded"}, + {file = "numpy-2.0.2-cp312-cp312-win32.whl", hash = "sha256:671bec6496f83202ed2d3c8fdc486a8fc86942f2e69ff0e986140339a63bcbe5"}, + {file = "numpy-2.0.2-cp312-cp312-win_amd64.whl", hash = "sha256:cfd41e13fdc257aa5778496b8caa5e856dc4896d4ccf01841daee1d96465467a"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9059e10581ce4093f735ed23f3b9d283b9d517ff46009ddd485f1747eb22653c"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:423e89b23490805d2a5a96fe40ec507407b8ee786d66f7328be214f9679df6dd"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_arm64.whl", hash = "sha256:2b2955fa6f11907cf7a70dab0d0755159bca87755e831e47932367fc8f2f2d0b"}, + {file = "numpy-2.0.2-cp39-cp39-macosx_14_0_x86_64.whl", hash = "sha256:97032a27bd9d8988b9a97a8c4d2c9f2c15a81f61e2f21404d7e8ef00cb5be729"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1e795a8be3ddbac43274f18588329c72939870a16cae810c2b73461c40718ab1"}, + {file = "numpy-2.0.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f26b258c385842546006213344c50655ff1555a9338e2e5e02a0756dc3e803dd"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:5fec9451a7789926bcf7c2b8d187292c9f93ea30284802a0ab3f5be8ab36865d"}, + {file = "numpy-2.0.2-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:9189427407d88ff25ecf8f12469d4d39d35bee1db5d39fc5c168c6f088a6956d"}, + {file = "numpy-2.0.2-cp39-cp39-win32.whl", hash = "sha256:905d16e0c60200656500c95b6b8dca5d109e23cb24abc701d41c02d74c6b3afa"}, + {file = "numpy-2.0.2-cp39-cp39-win_amd64.whl", hash = "sha256:a3f4ab0caa7f053f6797fcd4e1e25caee367db3112ef2b6ef82d749530768c73"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:7f0a0c6f12e07fa94133c8a67404322845220c06a9e80e85999afe727f7438b8"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-macosx_14_0_x86_64.whl", hash = "sha256:312950fdd060354350ed123c0e25a71327d3711584beaef30cdaa93320c392d4"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:26df23238872200f63518dd2aa984cfca675d82469535dc7162dc2ee52d9dd5c"}, + {file = "numpy-2.0.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:a46288ec55ebbd58947d31d72be2c63cbf839f0a63b49cb755022310792a3385"}, + {file = "numpy-2.0.2.tar.gz", hash = "sha256:883c987dee1880e2a864ab0dc9892292582510604156762362d9326444636e78"}, ] [[package]] @@ -4173,13 +4172,13 @@ xmp = ["defusedxml"] [[package]] name = "pkginfo" -version = "1.11.2" +version = "1.12.0" description = "Query metadata from sdists / bdists / installed packages." optional = false python-versions = ">=3.8" files = [ - {file = "pkginfo-1.11.2-py3-none-any.whl", hash = "sha256:9ec518eefccd159de7ed45386a6bb4c6ca5fa2cb3bd9b71154fae44f6f1b36a3"}, - {file = "pkginfo-1.11.2.tar.gz", hash = "sha256:c6bc916b8298d159e31f2c216e35ee5b86da7da18874f879798d0a1983537c86"}, + {file = "pkginfo-1.12.0-py3-none-any.whl", hash = "sha256:dcd589c9be4da8973eceffa247733c144812759aa67eaf4bbf97016a02f39088"}, + {file = "pkginfo-1.12.0.tar.gz", hash = "sha256:8ad91a0445a036782b9366ef8b8c2c50291f83a553478ba8580c73d3215700cf"}, ] [package.extras] @@ -4250,109 +4249,93 @@ wcwidth = "*" [[package]] name = "propcache" -version = "0.2.0" +version = "0.2.1" description = "Accelerated property cache" optional = false -python-versions = ">=3.8" +python-versions = ">=3.9" files = [ - {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:c5869b8fd70b81835a6f187c5fdbe67917a04d7e52b6e7cc4e5fe39d55c39d58"}, - {file = "propcache-0.2.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:952e0d9d07609d9c5be361f33b0d6d650cd2bae393aabb11d9b719364521984b"}, - {file = "propcache-0.2.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:33ac8f098df0585c0b53009f039dfd913b38c1d2edafed0cedcc0c32a05aa110"}, - {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:97e48e8875e6c13909c800fa344cd54cc4b2b0db1d5f911f840458a500fde2c2"}, - {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:388f3217649d6d59292b722d940d4d2e1e6a7003259eb835724092a1cca0203a"}, - {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f571aea50ba5623c308aa146eb650eebf7dbe0fd8c5d946e28343cb3b5aad577"}, - {file = "propcache-0.2.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3dfafb44f7bb35c0c06eda6b2ab4bfd58f02729e7c4045e179f9a861b07c9850"}, - {file = "propcache-0.2.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a3ebe9a75be7ab0b7da2464a77bb27febcb4fab46a34f9288f39d74833db7f61"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:d2f0d0f976985f85dfb5f3d685697ef769faa6b71993b46b295cdbbd6be8cc37"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a3dc1a4b165283bd865e8f8cb5f0c64c05001e0718ed06250d8cac9bec115b48"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9e0f07b42d2a50c7dd2d8675d50f7343d998c64008f1da5fef888396b7f84630"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e63e3e1e0271f374ed489ff5ee73d4b6e7c60710e1f76af5f0e1a6117cd26394"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:56bb5c98f058a41bb58eead194b4db8c05b088c93d94d5161728515bd52b052b"}, - {file = "propcache-0.2.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:7665f04d0c7f26ff8bb534e1c65068409bf4687aa2534faf7104d7182debb336"}, - {file = "propcache-0.2.0-cp310-cp310-win32.whl", hash = "sha256:7cf18abf9764746b9c8704774d8b06714bcb0a63641518a3a89c7f85cc02c2ad"}, - {file = "propcache-0.2.0-cp310-cp310-win_amd64.whl", hash = "sha256:cfac69017ef97db2438efb854edf24f5a29fd09a536ff3a992b75990720cdc99"}, - {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:63f13bf09cc3336eb04a837490b8f332e0db41da66995c9fd1ba04552e516354"}, - {file = "propcache-0.2.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:608cce1da6f2672a56b24a015b42db4ac612ee709f3d29f27a00c943d9e851de"}, - {file = "propcache-0.2.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:466c219deee4536fbc83c08d09115249db301550625c7fef1c5563a584c9bc87"}, - {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fc2db02409338bf36590aa985a461b2c96fce91f8e7e0f14c50c5fcc4f229016"}, - {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a6ed8db0a556343d566a5c124ee483ae113acc9a557a807d439bcecc44e7dfbb"}, - {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:91997d9cb4a325b60d4e3f20967f8eb08dfcb32b22554d5ef78e6fd1dda743a2"}, - {file = "propcache-0.2.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4c7dde9e533c0a49d802b4f3f218fa9ad0a1ce21f2c2eb80d5216565202acab4"}, - {file = "propcache-0.2.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffcad6c564fe6b9b8916c1aefbb37a362deebf9394bd2974e9d84232e3e08504"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:97a58a28bcf63284e8b4d7b460cbee1edaab24634e82059c7b8c09e65284f178"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:945db8ee295d3af9dbdbb698cce9bbc5c59b5c3fe328bbc4387f59a8a35f998d"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:39e104da444a34830751715f45ef9fc537475ba21b7f1f5b0f4d71a3b60d7fe2"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c5ecca8f9bab618340c8e848d340baf68bcd8ad90a8ecd7a4524a81c1764b3db"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:c436130cc779806bdf5d5fae0d848713105472b8566b75ff70048c47d3961c5b"}, - {file = "propcache-0.2.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:191db28dc6dcd29d1a3e063c3be0b40688ed76434622c53a284e5427565bbd9b"}, - {file = "propcache-0.2.0-cp311-cp311-win32.whl", hash = "sha256:5f2564ec89058ee7c7989a7b719115bdfe2a2fb8e7a4543b8d1c0cc4cf6478c1"}, - {file = "propcache-0.2.0-cp311-cp311-win_amd64.whl", hash = "sha256:6e2e54267980349b723cff366d1e29b138b9a60fa376664a157a342689553f71"}, - {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:2ee7606193fb267be4b2e3b32714f2d58cad27217638db98a60f9efb5efeccc2"}, - {file = "propcache-0.2.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:91ee8fc02ca52e24bcb77b234f22afc03288e1dafbb1f88fe24db308910c4ac7"}, - {file = "propcache-0.2.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2e900bad2a8456d00a113cad8c13343f3b1f327534e3589acc2219729237a2e8"}, - {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f52a68c21363c45297aca15561812d542f8fc683c85201df0bebe209e349f793"}, - {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1e41d67757ff4fbc8ef2af99b338bfb955010444b92929e9e55a6d4dcc3c4f09"}, - {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a64e32f8bd94c105cc27f42d3b658902b5bcc947ece3c8fe7bc1b05982f60e89"}, - {file = "propcache-0.2.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:55346705687dbd7ef0d77883ab4f6fabc48232f587925bdaf95219bae072491e"}, - {file = "propcache-0.2.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:00181262b17e517df2cd85656fcd6b4e70946fe62cd625b9d74ac9977b64d8d9"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:6994984550eaf25dd7fc7bd1b700ff45c894149341725bb4edc67f0ffa94efa4"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:56295eb1e5f3aecd516d91b00cfd8bf3a13991de5a479df9e27dd569ea23959c"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:439e76255daa0f8151d3cb325f6dd4a3e93043e6403e6491813bcaaaa8733887"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f6475a1b2ecb310c98c28d271a30df74f9dd436ee46d09236a6b750a7599ce57"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:3444cdba6628accf384e349014084b1cacd866fbb88433cd9d279d90a54e0b23"}, - {file = "propcache-0.2.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:4a9d9b4d0a9b38d1c391bb4ad24aa65f306c6f01b512e10a8a34a2dc5675d348"}, - {file = "propcache-0.2.0-cp312-cp312-win32.whl", hash = "sha256:69d3a98eebae99a420d4b28756c8ce6ea5a29291baf2dc9ff9414b42676f61d5"}, - {file = "propcache-0.2.0-cp312-cp312-win_amd64.whl", hash = "sha256:ad9c9b99b05f163109466638bd30ada1722abb01bbb85c739c50b6dc11f92dc3"}, - {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:ecddc221a077a8132cf7c747d5352a15ed763b674c0448d811f408bf803d9ad7"}, - {file = "propcache-0.2.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:0e53cb83fdd61cbd67202735e6a6687a7b491c8742dfc39c9e01e80354956763"}, - {file = "propcache-0.2.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:92fe151145a990c22cbccf9ae15cae8ae9eddabfc949a219c9f667877e40853d"}, - {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d6a21ef516d36909931a2967621eecb256018aeb11fc48656e3257e73e2e247a"}, - {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3f88a4095e913f98988f5b338c1d4d5d07dbb0b6bad19892fd447484e483ba6b"}, - {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5a5b3bb545ead161be780ee85a2b54fdf7092815995661947812dde94a40f6fb"}, - {file = "propcache-0.2.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67aeb72e0f482709991aa91345a831d0b707d16b0257e8ef88a2ad246a7280bf"}, - {file = "propcache-0.2.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3c997f8c44ec9b9b0bcbf2d422cc00a1d9b9c681f56efa6ca149a941e5560da2"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:2a66df3d4992bc1d725b9aa803e8c5a66c010c65c741ad901e260ece77f58d2f"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:3ebbcf2a07621f29638799828b8d8668c421bfb94c6cb04269130d8de4fb7136"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:1235c01ddaa80da8235741e80815ce381c5267f96cc49b1477fdcf8c047ef325"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:3947483a381259c06921612550867b37d22e1df6d6d7e8361264b6d037595f44"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:d5bed7f9805cc29c780f3aee05de3262ee7ce1f47083cfe9f77471e9d6777e83"}, - {file = "propcache-0.2.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e4a91d44379f45f5e540971d41e4626dacd7f01004826a18cb048e7da7e96544"}, - {file = "propcache-0.2.0-cp313-cp313-win32.whl", hash = "sha256:f902804113e032e2cdf8c71015651c97af6418363bea8d78dc0911d56c335032"}, - {file = "propcache-0.2.0-cp313-cp313-win_amd64.whl", hash = "sha256:8f188cfcc64fb1266f4684206c9de0e80f54622c3f22a910cbd200478aeae61e"}, - {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:53d1bd3f979ed529f0805dd35ddaca330f80a9a6d90bc0121d2ff398f8ed8861"}, - {file = "propcache-0.2.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:83928404adf8fb3d26793665633ea79b7361efa0287dfbd372a7e74311d51ee6"}, - {file = "propcache-0.2.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:77a86c261679ea5f3896ec060be9dc8e365788248cc1e049632a1be682442063"}, - {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:218db2a3c297a3768c11a34812e63b3ac1c3234c3a086def9c0fee50d35add1f"}, - {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7735e82e3498c27bcb2d17cb65d62c14f1100b71723b68362872bca7d0913d90"}, - {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20a617c776f520c3875cf4511e0d1db847a076d720714ae35ffe0df3e440be68"}, - {file = "propcache-0.2.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:67b69535c870670c9f9b14a75d28baa32221d06f6b6fa6f77a0a13c5a7b0a5b9"}, - {file = "propcache-0.2.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4569158070180c3855e9c0791c56be3ceeb192defa2cdf6a3f39e54319e56b89"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_aarch64.whl", hash = "sha256:db47514ffdbd91ccdc7e6f8407aac4ee94cc871b15b577c1c324236b013ddd04"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_armv7l.whl", hash = "sha256:2a60ad3e2553a74168d275a0ef35e8c0a965448ffbc3b300ab3a5bb9956c2162"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_i686.whl", hash = "sha256:662dd62358bdeaca0aee5761de8727cfd6861432e3bb828dc2a693aa0471a563"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_ppc64le.whl", hash = "sha256:25a1f88b471b3bc911d18b935ecb7115dff3a192b6fef46f0bfaf71ff4f12418"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_s390x.whl", hash = "sha256:f60f0ac7005b9f5a6091009b09a419ace1610e163fa5deaba5ce3484341840e7"}, - {file = "propcache-0.2.0-cp38-cp38-musllinux_1_2_x86_64.whl", hash = "sha256:74acd6e291f885678631b7ebc85d2d4aec458dd849b8c841b57ef04047833bed"}, - {file = "propcache-0.2.0-cp38-cp38-win32.whl", hash = "sha256:d9b6ddac6408194e934002a69bcaadbc88c10b5f38fb9307779d1c629181815d"}, - {file = "propcache-0.2.0-cp38-cp38-win_amd64.whl", hash = "sha256:676135dcf3262c9c5081cc8f19ad55c8a64e3f7282a21266d05544450bffc3a5"}, - {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:25c8d773a62ce0451b020c7b29a35cfbc05de8b291163a7a0f3b7904f27253e6"}, - {file = "propcache-0.2.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:375a12d7556d462dc64d70475a9ee5982465fbb3d2b364f16b86ba9135793638"}, - {file = "propcache-0.2.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1ec43d76b9677637a89d6ab86e1fef70d739217fefa208c65352ecf0282be957"}, - {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f45eec587dafd4b2d41ac189c2156461ebd0c1082d2fe7013571598abb8505d1"}, - {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bc092ba439d91df90aea38168e11f75c655880c12782facf5cf9c00f3d42b562"}, - {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fa1076244f54bb76e65e22cb6910365779d5c3d71d1f18b275f1dfc7b0d71b4d"}, - {file = "propcache-0.2.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:682a7c79a2fbf40f5dbb1eb6bfe2cd865376deeac65acf9beb607505dced9e12"}, - {file = "propcache-0.2.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e40876731f99b6f3c897b66b803c9e1c07a989b366c6b5b475fafd1f7ba3fb8"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:363ea8cd3c5cb6679f1c2f5f1f9669587361c062e4899fce56758efa928728f8"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:140fbf08ab3588b3468932974a9331aff43c0ab8a2ec2c608b6d7d1756dbb6cb"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:e70fac33e8b4ac63dfc4c956fd7d85a0b1139adcfc0d964ce288b7c527537fea"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b33d7a286c0dc1a15f5fc864cc48ae92a846df287ceac2dd499926c3801054a6"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:f6d5749fdd33d90e34c2efb174c7e236829147a2713334d708746e94c4bde40d"}, - {file = "propcache-0.2.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:22aa8f2272d81d9317ff5756bb108021a056805ce63dd3630e27d042c8092798"}, - {file = "propcache-0.2.0-cp39-cp39-win32.whl", hash = "sha256:73e4b40ea0eda421b115248d7e79b59214411109a5bc47d0d48e4c73e3b8fcf9"}, - {file = "propcache-0.2.0-cp39-cp39-win_amd64.whl", hash = "sha256:9517d5e9e0731957468c29dbfd0f976736a0e55afaea843726e887f36fe017df"}, - {file = "propcache-0.2.0-py3-none-any.whl", hash = "sha256:2ccc28197af5313706511fab3a8b66dcd6da067a1331372c82ea1cb74285e036"}, - {file = "propcache-0.2.0.tar.gz", hash = "sha256:df81779732feb9d01e5d513fad0122efb3d53bbc75f61b2a4f29a020bc985e70"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:6b3f39a85d671436ee3d12c017f8fdea38509e4f25b28eb25877293c98c243f6"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:39d51fbe4285d5db5d92a929e3e21536ea3dd43732c5b177c7ef03f918dff9f2"}, + {file = "propcache-0.2.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6445804cf4ec763dc70de65a3b0d9954e868609e83850a47ca4f0cb64bd79fea"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f9479aa06a793c5aeba49ce5c5692ffb51fcd9a7016e017d555d5e2b0045d212"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d9631c5e8b5b3a0fda99cb0d29c18133bca1e18aea9effe55adb3da1adef80d3"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3156628250f46a0895f1f36e1d4fbe062a1af8718ec3ebeb746f1d23f0c5dc4d"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b6fb63ae352e13748289f04f37868099e69dba4c2b3e271c46061e82c745634"}, + {file = "propcache-0.2.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:887d9b0a65404929641a9fabb6452b07fe4572b269d901d622d8a34a4e9043b2"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:a96dc1fa45bd8c407a0af03b2d5218392729e1822b0c32e62c5bf7eeb5fb3958"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:a7e65eb5c003a303b94aa2c3852ef130230ec79e349632d030e9571b87c4698c"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:999779addc413181912e984b942fbcc951be1f5b3663cd80b2687758f434c583"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:19a0f89a7bb9d8048d9c4370c9c543c396e894c76be5525f5e1ad287f1750ddf"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:1ac2f5fe02fa75f56e1ad473f1175e11f475606ec9bd0be2e78e4734ad575034"}, + {file = "propcache-0.2.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:574faa3b79e8ebac7cb1d7930f51184ba1ccf69adfdec53a12f319a06030a68b"}, + {file = "propcache-0.2.1-cp310-cp310-win32.whl", hash = "sha256:03ff9d3f665769b2a85e6157ac8b439644f2d7fd17615a82fa55739bc97863f4"}, + {file = "propcache-0.2.1-cp310-cp310-win_amd64.whl", hash = "sha256:2d3af2e79991102678f53e0dbf4c35de99b6b8b58f29a27ca0325816364caaba"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:1ffc3cca89bb438fb9c95c13fc874012f7b9466b89328c3c8b1aa93cdcfadd16"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:f174bbd484294ed9fdf09437f889f95807e5f229d5d93588d34e92106fbf6717"}, + {file = "propcache-0.2.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:70693319e0b8fd35dd863e3e29513875eb15c51945bf32519ef52927ca883bc3"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b480c6a4e1138e1aa137c0079b9b6305ec6dcc1098a8ca5196283e8a49df95a9"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d27b84d5880f6d8aa9ae3edb253c59d9f6642ffbb2c889b78b60361eed449787"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:857112b22acd417c40fa4595db2fe28ab900c8c5fe4670c7989b1c0230955465"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cf6c4150f8c0e32d241436526f3c3f9cbd34429492abddbada2ffcff506c51af"}, + {file = "propcache-0.2.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:66d4cfda1d8ed687daa4bc0274fcfd5267873db9a5bc0418c2da19273040eeb7"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:c2f992c07c0fca81655066705beae35fc95a2fa7366467366db627d9f2ee097f"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:4a571d97dbe66ef38e472703067021b1467025ec85707d57e78711c085984e54"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:bb6178c241278d5fe853b3de743087be7f5f4c6f7d6d22a3b524d323eecec505"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:ad1af54a62ffe39cf34db1aa6ed1a1873bd548f6401db39d8e7cd060b9211f82"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:e7048abd75fe40712005bcfc06bb44b9dfcd8e101dda2ecf2f5aa46115ad07ca"}, + {file = "propcache-0.2.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:160291c60081f23ee43d44b08a7e5fb76681221a8e10b3139618c5a9a291b84e"}, + {file = "propcache-0.2.1-cp311-cp311-win32.whl", hash = "sha256:819ce3b883b7576ca28da3861c7e1a88afd08cc8c96908e08a3f4dd64a228034"}, + {file = "propcache-0.2.1-cp311-cp311-win_amd64.whl", hash = "sha256:edc9fc7051e3350643ad929df55c451899bb9ae6d24998a949d2e4c87fb596d3"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:081a430aa8d5e8876c6909b67bd2d937bfd531b0382d3fdedb82612c618bc41a"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d2ccec9ac47cf4e04897619c0e0c1a48c54a71bdf045117d3a26f80d38ab1fb0"}, + {file = "propcache-0.2.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:14d86fe14b7e04fa306e0c43cdbeebe6b2c2156a0c9ce56b815faacc193e320d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:049324ee97bb67285b49632132db351b41e77833678432be52bdd0289c0e05e4"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1cd9a1d071158de1cc1c71a26014dcdfa7dd3d5f4f88c298c7f90ad6f27bb46d"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:98110aa363f1bb4c073e8dcfaefd3a5cea0f0834c2aab23dda657e4dab2f53b5"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:647894f5ae99c4cf6bb82a1bb3a796f6e06af3caa3d32e26d2350d0e3e3faf24"}, + {file = "propcache-0.2.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:bfd3223c15bebe26518d58ccf9a39b93948d3dcb3e57a20480dfdd315356baff"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:d71264a80f3fcf512eb4f18f59423fe82d6e346ee97b90625f283df56aee103f"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:e73091191e4280403bde6c9a52a6999d69cdfde498f1fdf629105247599b57ec"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:3935bfa5fede35fb202c4b569bb9c042f337ca4ff7bd540a0aa5e37131659348"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:f508b0491767bb1f2b87fdfacaba5f7eddc2f867740ec69ece6d1946d29029a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:1672137af7c46662a1c2be1e8dc78cb6d224319aaa40271c9257d886be4363a6"}, + {file = "propcache-0.2.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b74c261802d3d2b85c9df2dfb2fa81b6f90deeef63c2db9f0e029a3cac50b518"}, + {file = "propcache-0.2.1-cp312-cp312-win32.whl", hash = "sha256:d09c333d36c1409d56a9d29b3a1b800a42c76a57a5a8907eacdbce3f18768246"}, + {file = "propcache-0.2.1-cp312-cp312-win_amd64.whl", hash = "sha256:c214999039d4f2a5b2073ac506bba279945233da8c786e490d411dfc30f855c1"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:aca405706e0b0a44cc6bfd41fbe89919a6a56999157f6de7e182a990c36e37bc"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:12d1083f001ace206fe34b6bdc2cb94be66d57a850866f0b908972f90996b3e9"}, + {file = "propcache-0.2.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:d93f3307ad32a27bda2e88ec81134b823c240aa3abb55821a8da553eed8d9439"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba278acf14471d36316159c94a802933d10b6a1e117b8554fe0d0d9b75c9d536"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4e6281aedfca15301c41f74d7005e6e3f4ca143584ba696ac69df4f02f40d629"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5b750a8e5a1262434fb1517ddf64b5de58327f1adc3524a5e44c2ca43305eb0b"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bf72af5e0fb40e9babf594308911436c8efde3cb5e75b6f206c34ad18be5c052"}, + {file = "propcache-0.2.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b2d0a12018b04f4cb820781ec0dffb5f7c7c1d2a5cd22bff7fb055a2cb19ebce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e800776a79a5aabdb17dcc2346a7d66d0777e942e4cd251defeb084762ecd17d"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:4160d9283bd382fa6c0c2b5e017acc95bc183570cd70968b9202ad6d8fc48dce"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:30b43e74f1359353341a7adb783c8f1b1c676367b011709f466f42fda2045e95"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:58791550b27d5488b1bb52bc96328456095d96206a250d28d874fafe11b3dfaf"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:0f022d381747f0dfe27e99d928e31bc51a18b65bb9e481ae0af1380a6725dd1f"}, + {file = "propcache-0.2.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:297878dc9d0a334358f9b608b56d02e72899f3b8499fc6044133f0d319e2ec30"}, + {file = "propcache-0.2.1-cp313-cp313-win32.whl", hash = "sha256:ddfab44e4489bd79bda09d84c430677fc7f0a4939a73d2bba3073036f487a0a6"}, + {file = "propcache-0.2.1-cp313-cp313-win_amd64.whl", hash = "sha256:556fc6c10989f19a179e4321e5d678db8eb2924131e64652a51fe83e4c3db0e1"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6a9a8c34fb7bb609419a211e59da8887eeca40d300b5ea8e56af98f6fbbb1541"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:ae1aa1cd222c6d205853b3013c69cd04515f9d6ab6de4b0603e2e1c33221303e"}, + {file = "propcache-0.2.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:accb6150ce61c9c4b7738d45550806aa2b71c7668c6942f17b0ac182b6142fd4"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5eee736daafa7af6d0a2dc15cc75e05c64f37fc37bafef2e00d77c14171c2097"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f7a31fc1e1bd362874863fdeed71aed92d348f5336fd84f2197ba40c59f061bd"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cba4cfa1052819d16699e1d55d18c92b6e094d4517c41dd231a8b9f87b6fa681"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f089118d584e859c62b3da0892b88a83d611c2033ac410e929cb6754eec0ed16"}, + {file = "propcache-0.2.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:781e65134efaf88feb447e8c97a51772aa75e48b794352f94cb7ea717dedda0d"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:31f5af773530fd3c658b32b6bdc2d0838543de70eb9a2156c03e410f7b0d3aae"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:a7a078f5d37bee6690959c813977da5291b24286e7b962e62a94cec31aa5188b"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:cea7daf9fc7ae6687cf1e2c049752f19f146fdc37c2cc376e7d0032cf4f25347"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:8b3489ff1ed1e8315674d0775dc7d2195fb13ca17b3808721b54dbe9fd020faf"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:9403db39be1393618dd80c746cb22ccda168efce239c73af13c3763ef56ffc04"}, + {file = "propcache-0.2.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:5d97151bc92d2b2578ff7ce779cdb9174337390a535953cbb9452fb65164c587"}, + {file = "propcache-0.2.1-cp39-cp39-win32.whl", hash = "sha256:9caac6b54914bdf41bcc91e7eb9147d331d29235a7c967c150ef5df6464fd1bb"}, + {file = "propcache-0.2.1-cp39-cp39-win_amd64.whl", hash = "sha256:92fc4500fcb33899b05ba73276dfb684a20d31caa567b7cb5252d48f896a91b1"}, + {file = "propcache-0.2.1-py3-none-any.whl", hash = "sha256:52277518d6aae65536e9cea52d4e7fd2f7a66f4aa2d30ed3f2fcea620ace3c54"}, + {file = "propcache-0.2.1.tar.gz", hash = "sha256:3f77ce728b19cb537714499928fe800c3dda29e8d9428778fc7c186da4c09a64"}, ] [[package]] @@ -4808,99 +4791,104 @@ model = ["milvus-model (>=0.1.0)"] [[package]] name = "pyobjc-core" -version = "10.3.1" +version = "10.3.2" description = "Python<->ObjC Interoperability Module" optional = true python-versions = ">=3.8" files = [ - {file = "pyobjc_core-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:ea46d2cda17921e417085ac6286d43ae448113158afcf39e0abe484c58fb3d78"}, - {file = "pyobjc_core-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:899d3c84d2933d292c808f385dc881a140cf08632907845043a333a9d7c899f9"}, - {file = "pyobjc_core-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:6ff5823d13d0a534cdc17fa4ad47cf5bee4846ce0fd27fc40012e12b46db571b"}, - {file = "pyobjc_core-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:2581e8e68885bcb0e11ec619e81ef28e08ee3fac4de20d8cc83bc5af5bcf4a90"}, - {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:ea98d4c2ec39ca29e62e0327db21418696161fb138ee6278daf2acbedf7ce504"}, - {file = "pyobjc_core-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:4c179c26ee2123d0aabffb9dbc60324b62b6f8614fb2c2328b09386ef59ef6d8"}, - {file = "pyobjc_core-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:cb901fce65c9be420c40d8a6ee6fff5ff27c6945f44fd7191989b982baa66dea"}, - {file = "pyobjc_core-10.3.1.tar.gz", hash = "sha256:b204a80ccc070f9ab3f8af423a3a25a6fd787e228508d00c4c30f8ac538ba720"}, + {file = "pyobjc_core-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:acb40672d682851a5c7fd84e5041c4d069b62076168d72591abb5fcc871bb039"}, + {file = "pyobjc_core-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:cea5e77659619ad93c782ca07644b6efe7d7ec6f59e46128843a0a87c1af511a"}, + {file = "pyobjc_core-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:16644a92fb9661de841ba6115e5354db06a1d193a5e239046e840013c7b3874d"}, + {file = "pyobjc_core-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:76b8b911d94501dac89821df349b1860bb770dce102a1a293f524b5b09dd9462"}, + {file = "pyobjc_core-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:8c6288fdb210b64115760a4504efbc4daffdc390d309e9318eb0e3e3b78d2828"}, + {file = "pyobjc_core-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:87901e9f7032f33eb4fa884e407bf2744d5a0791b379bfca783982a02be3f7fb"}, + {file = "pyobjc_core-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:636971ab48a4198ca129e149fe58ccf85a7b4a9b93d27f5ae920d88eb2655431"}, + {file = "pyobjc_core-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:48e9ac3af42b2340dae709a8b894f5ef7e5132d8546adcd1797cffcc449dabdc"}, + {file = "pyobjc_core-10.3.2.tar.gz", hash = "sha256:dbf1475d864ce594288ce03e94e3a98dc7f0e4639971eb1e312bdf6661c21e0e"}, ] [[package]] name = "pyobjc-framework-cocoa" -version = "10.3.1" +version = "10.3.2" description = "Wrappers for the Cocoa frameworks on macOS" optional = true python-versions = ">=3.8" files = [ - {file = "pyobjc_framework_Cocoa-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:4cb4f8491ab4d9b59f5187e42383f819f7a46306a4fa25b84f126776305291d1"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5f31021f4f8fdf873b57a97ee1f3c1620dbe285e0b4eaed73dd0005eb72fd773"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:11b4e0bad4bbb44a4edda128612f03cdeab38644bbf174de0c13129715497296"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:de5e62e5ccf2871a94acf3bf79646b20ea893cc9db78afa8d1fe1b0d0f7cbdb0"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c5af24610ab639bd1f521ce4500484b40787f898f691b7a23da3339e6bc8b90"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a7151186bb7805deea434fae9a4423335e6371d105f29e73cc2036c6779a9dbc"}, - {file = "pyobjc_framework_Cocoa-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:743d2a1ac08027fd09eab65814c79002a1d0421d7c0074ffd1217b6560889744"}, - {file = "pyobjc_framework_cocoa-10.3.1.tar.gz", hash = "sha256:1cf20714daaa986b488fb62d69713049f635c9d41a60c8da97d835710445281a"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:61f44c2adab28fdf3aa3d593c9497a2d9ceb9583ed9814adb48828c385d83ff4"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7caaf8b260e81b27b7b787332846f644b9423bfc1536f6ec24edbde59ab77a87"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c49e99fc4b9e613fb308651b99d52a8a9ae9916c8ef27aa2f5d585b6678a59bf"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:f1161b5713f9b9934c12649d73a6749617172e240f9431eff9e22175262fdfda"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:08e48b9ee4eb393447b2b781d16663b954bd10a26927df74f92e924c05568d89"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:7faa448d2038ae0e0287a326d390002e744bb6470e45995e2dbd16c892e4495a"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:fcd53fee2be9708576617994b107aedc2c40824b648cd51e780e8399c0a447b6"}, + {file = "pyobjc_framework_Cocoa-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:838fcf0d10674bde9ff64a3f20c0e188f2dc5e804476d80509b81c4ac1dabc59"}, + {file = "pyobjc_framework_cocoa-10.3.2.tar.gz", hash = "sha256:673968e5435845bef969bfe374f31a1a6dc660c98608d2b84d5cae6eafa5c39d"}, ] [package.dependencies] -pyobjc-core = ">=10.3.1" +pyobjc-core = ">=10.3.2" [[package]] name = "pyobjc-framework-coreml" -version = "10.3.1" +version = "10.3.2" description = "Wrappers for the framework CoreML on macOS" optional = true python-versions = ">=3.8" files = [ - {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:c1fdcc0487807afa9cd0f88f25697e0e2e093d0219e8e1aa42aa3674dd78c2cb"}, - {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:21c87e84c807b5dbe61e0f016d9aefa32d3212f175cc4b976b5c08770be7a58c"}, - {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a0877aed5d4cdbb63d1246cd5384c09d78a0667e83c435a1257d10017c11c1a4"}, - {file = "pyobjc_framework_CoreML-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4bd3f1acfb3245727727b71cbcf7d21a33d7e00fa488e41ad01527764b969b92"}, - {file = "pyobjc_framework_coreml-10.3.1.tar.gz", hash = "sha256:6b7091142cfaafee76f1a804329e7a4e3aeca921eea8644e9ceba4cc2751f705"}, + {file = "pyobjc_framework_CoreML-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:fcac461545f007d648d2ff67f2734420c77173b467549e4a9d6b38a75dad2df7"}, + {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:feea183b192cc806485b7713f135e544e7fa7ece3cea0e8cde92db4ae19374ab"}, + {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:15c89f9f37e46924357eb1c9859dfe4802a409263bb502b6a997046548097983"}, + {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:a975f2667d7e5ad81091db5a89a27c0e091f20ac4be8de309b3b20d177d83637"}, + {file = "pyobjc_framework_CoreML-10.3.2-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:559967fa7dd82e75cf84ae53b176ea6da8d7705e589213aea9fe10ac0ce1d100"}, + {file = "pyobjc_framework_coreml-10.3.2.tar.gz", hash = "sha256:f2e6eabe41fa34e964b707ba7a1269d5e049d5a7ac5574f35c4faa0647f385ba"}, ] [package.dependencies] -pyobjc-core = ">=10.3.1" -pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-core = ">=10.3.2" +pyobjc-framework-Cocoa = ">=10.3.2" [[package]] name = "pyobjc-framework-quartz" -version = "10.3.1" +version = "10.3.2" description = "Wrappers for the Quartz frameworks on macOS" optional = true python-versions = ">=3.8" files = [ - {file = "pyobjc_framework_Quartz-10.3.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5ef4fd315ed2bc42ef77fdeb2bae28a88ec986bd7b8079a87ba3b3475348f96e"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:96578d4a3e70164efe44ad7dc320ecd4e211758ffcde5dcd694de1bbdfe090a4"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:ca35f92486869a41847a1703bb176aab8a53dbfd8e678d1f4d68d8e6e1581c71"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:00a0933267e3a46ea4afcc35d117b2efb920f06de797fa66279c52e7057e3590"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:a161bedb4c5257a02ad56a910cd7eefb28bdb0ea78607df0d70ed4efe4ea54c1"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:d7a8028e117a94923a511944bfa9daf9744e212f06cf89010c60934a479863a5"}, - {file = "pyobjc_framework_Quartz-10.3.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:de00c983b3267eb26fa42c6ed9f15e2bf006bde8afa7fe2b390646aa21a5d6fc"}, - {file = "pyobjc_framework_quartz-10.3.1.tar.gz", hash = "sha256:b6d7e346d735c9a7f147cd78e6da79eeae416a0b7d3874644c83a23786c6f886"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:5574754c23895269751c2b78d2d2b33b6de415f562534a1432484558f0a5a293"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4697f3ef1991f7877c201778005dc4098ced3d19d938ebf916384c8f795488d3"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:604188ee8ff051ffe74a12cb3274403fe9c3fa02b15fc4132685c0f74285ffe5"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:9e27fb446e012c9571bc163cff5f3036e9e6fa5caca06b5d7882ad1c6b6aaf0c"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:d5bd6ef96a3d08c97cf2aca43a819113cdff494b5abebcedd7cf23b6d6e711f4"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:d3b55ec27cffff18d98d73694001a211ad4cdf717f7d8ad76235f845771d8b5d"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp38-cp38-macosx_11_0_universal2.whl", hash = "sha256:a58826db7e71de4654e5215b46f00f7825b17991078c9ba74ca729a4da024f82"}, + {file = "pyobjc_framework_Quartz-10.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:6ede1001c28d27fc76f89a3243b3127dbd7dd03f39a3324766ae895cdcd1ebf1"}, + {file = "pyobjc_framework_quartz-10.3.2.tar.gz", hash = "sha256:193e7752c93e2d1304f914e3a8c069f4b66de237376c5285ba7c72e9ee0e3b15"}, ] [package.dependencies] -pyobjc-core = ">=10.3.1" -pyobjc-framework-Cocoa = ">=10.3.1" +pyobjc-core = ">=10.3.2" +pyobjc-framework-Cocoa = ">=10.3.2" [[package]] name = "pyobjc-framework-vision" -version = "10.3.1" +version = "10.3.2" description = "Wrappers for the framework Vision on macOS" optional = true python-versions = ">=3.8" files = [ - {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:dff3582678930461a0bb11bf070854d49f6944a851dc89edc63fac93c75ddf39"}, - {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:32626183c51674efb3b5738e2884c3fea37edca010117cf71bd72cb3c49c869a"}, - {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2473b346a112c51ac485184305bd13c402e0db45f2df3d277315bd49efba18e9"}, - {file = "pyobjc_framework_Vision-10.3.1-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:4302e2c5f68c9667ecd4273809cbc4611af6368b123d69596e5b088f1b1aa16b"}, - {file = "pyobjc_framework_vision-10.3.1.tar.gz", hash = "sha256:aa071656d395afc2d624600a9f30d6a3344aa747bf37f613ff3972158c40881c"}, + {file = "pyobjc_framework_Vision-10.3.2-cp313-cp313t-macosx_10_13_universal2.whl", hash = "sha256:62efeeef9317d6014b26e4476de45f4b2853970272e1a236e45044ad8ac8b2fb"}, + {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_13_universal2.whl", hash = "sha256:cae03536f12ed5764ecfdcf9cf96b37e577cc6e8c466aeb23a6aa0682b45ae39"}, + {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_9_universal2.whl", hash = "sha256:ba5ccd0bf12c29c2cdf1b52405c395929b5802e9120476b8e9a01af691ab33dc"}, + {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_10_9_x86_64.whl", hash = "sha256:2b7edc178ebeb621ba9a239449f8ae1fc6b643f60914ff2be4dad69e901ca331"}, + {file = "pyobjc_framework_Vision-10.3.2-cp36-abi3-macosx_11_0_universal2.whl", hash = "sha256:1083e23ee4dae7cca8e2d094b1995909690b277c967975227d3395222c0c7377"}, + {file = "pyobjc_framework_vision-10.3.2.tar.gz", hash = "sha256:5cfea4a750657e2c8e7c8b0c26c7aac2578ba09ab8f66ffa0e2ee632410cacf3"}, ] [package.dependencies] -pyobjc-core = ">=10.3.1" -pyobjc-framework-Cocoa = ">=10.3.1" -pyobjc-framework-CoreML = ">=10.3.1" -pyobjc-framework-Quartz = ">=10.3.1" +pyobjc-core = ">=10.3.2" +pyobjc-framework-Cocoa = ">=10.3.2" +pyobjc-framework-CoreML = ">=10.3.2" +pyobjc-framework-Quartz = ">=10.3.2" [[package]] name = "pypdfium2" @@ -5712,101 +5700,112 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.21.0" +version = "0.22.0" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.21.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a017f813f24b9df929674d0332a374d40d7f0162b326562daae8066b502d0590"}, - {file = "rpds_py-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:20cc1ed0bcc86d8e1a7e968cce15be45178fd16e2ff656a243145e0b439bd250"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ad116dda078d0bc4886cb7840e19811562acdc7a8e296ea6ec37e70326c1b41c"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:808f1ac7cf3b44f81c9475475ceb221f982ef548e44e024ad5f9e7060649540e"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de552f4a1916e520f2703ec474d2b4d3f86d41f353e7680b597512ffe7eac5d0"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:efec946f331349dfc4ae9d0e034c263ddde19414fe5128580f512619abed05f1"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b80b4690bbff51a034bfde9c9f6bf9357f0a8c61f548942b80f7b66356508bf5"}, - {file = "rpds_py-0.21.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:085ed25baac88953d4283e5b5bd094b155075bb40d07c29c4f073e10623f9f2e"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:daa8efac2a1273eed2354397a51216ae1e198ecbce9036fba4e7610b308b6153"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:95a5bad1ac8a5c77b4e658671642e4af3707f095d2b78a1fdd08af0dfb647624"}, - {file = "rpds_py-0.21.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:3e53861b29a13d5b70116ea4230b5f0f3547b2c222c5daa090eb7c9c82d7f664"}, - {file = "rpds_py-0.21.0-cp310-none-win32.whl", hash = "sha256:ea3a6ac4d74820c98fcc9da4a57847ad2cc36475a8bd9683f32ab6d47a2bd682"}, - {file = "rpds_py-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:b8f107395f2f1d151181880b69a2869c69e87ec079c49c0016ab96860b6acbe5"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5555db3e618a77034954b9dc547eae94166391a98eb867905ec8fcbce1308d95"}, - {file = "rpds_py-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:97ef67d9bbc3e15584c2f3c74bcf064af36336c10d2e21a2131e123ce0f924c9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ab2c2a26d2f69cdf833174f4d9d86118edc781ad9a8fa13970b527bf8236027"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4e8921a259f54bfbc755c5bbd60c82bb2339ae0324163f32868f63f0ebb873d9"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8a7ff941004d74d55a47f916afc38494bd1cfd4b53c482b77c03147c91ac0ac3"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5145282a7cd2ac16ea0dc46b82167754d5e103a05614b724457cffe614f25bd8"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:de609a6f1b682f70bb7163da745ee815d8f230d97276db049ab447767466a09d"}, - {file = "rpds_py-0.21.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:40c91c6e34cf016fa8e6b59d75e3dbe354830777fcfd74c58b279dceb7975b75"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:d2132377f9deef0c4db89e65e8bb28644ff75a18df5293e132a8d67748397b9f"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0a9e0759e7be10109645a9fddaaad0619d58c9bf30a3f248a2ea57a7c417173a"}, - {file = "rpds_py-0.21.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:9e20da3957bdf7824afdd4b6eeb29510e83e026473e04952dca565170cd1ecc8"}, - {file = "rpds_py-0.21.0-cp311-none-win32.whl", hash = "sha256:f71009b0d5e94c0e86533c0b27ed7cacc1239cb51c178fd239c3cfefefb0400a"}, - {file = "rpds_py-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:e168afe6bf6ab7ab46c8c375606298784ecbe3ba31c0980b7dcbb9631dcba97e"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:30b912c965b2aa76ba5168fd610087bad7fcde47f0a8367ee8f1876086ee6d1d"}, - {file = "rpds_py-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:ca9989d5d9b1b300bc18e1801c67b9f6d2c66b8fd9621b36072ed1df2c977f72"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f54e7106f0001244a5f4cf810ba8d3f9c542e2730821b16e969d6887b664266"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:fed5dfefdf384d6fe975cc026886aece4f292feaf69d0eeb716cfd3c5a4dd8be"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:590ef88db231c9c1eece44dcfefd7515d8bf0d986d64d0caf06a81998a9e8cab"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f983e4c2f603c95dde63df633eec42955508eefd8d0f0e6d236d31a044c882d7"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b229ce052ddf1a01c67d68166c19cb004fb3612424921b81c46e7ea7ccf7c3bf"}, - {file = "rpds_py-0.21.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ebf64e281a06c904a7636781d2e973d1f0926a5b8b480ac658dc0f556e7779f4"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:998a8080c4495e4f72132f3d66ff91f5997d799e86cec6ee05342f8f3cda7dca"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:98486337f7b4f3c324ab402e83453e25bb844f44418c066623db88e4c56b7c7b"}, - {file = "rpds_py-0.21.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:a78d8b634c9df7f8d175451cfeac3810a702ccb85f98ec95797fa98b942cea11"}, - {file = "rpds_py-0.21.0-cp312-none-win32.whl", hash = "sha256:a58ce66847711c4aa2ecfcfaff04cb0327f907fead8945ffc47d9407f41ff952"}, - {file = "rpds_py-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:e860f065cc4ea6f256d6f411aba4b1251255366e48e972f8a347cf88077b24fd"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ee4eafd77cc98d355a0d02f263efc0d3ae3ce4a7c24740010a8b4012bbb24937"}, - {file = "rpds_py-0.21.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:688c93b77e468d72579351a84b95f976bd7b3e84aa6686be6497045ba84be560"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c38dbf31c57032667dd5a2f0568ccde66e868e8f78d5a0d27dcc56d70f3fcd3b"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2d6129137f43f7fa02d41542ffff4871d4aefa724a5fe38e2c31a4e0fd343fb0"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:520ed8b99b0bf86a176271f6fe23024323862ac674b1ce5b02a72bfeff3fff44"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:aaeb25ccfb9b9014a10eaf70904ebf3f79faaa8e60e99e19eef9f478651b9b74"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:af04ac89c738e0f0f1b913918024c3eab6e3ace989518ea838807177d38a2e94"}, - {file = "rpds_py-0.21.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b9b76e2afd585803c53c5b29e992ecd183f68285b62fe2668383a18e74abe7a3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:5afb5efde74c54724e1a01118c6e5c15e54e642c42a1ba588ab1f03544ac8c7a"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:52c041802a6efa625ea18027a0723676a778869481d16803481ef6cc02ea8cb3"}, - {file = "rpds_py-0.21.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:ee1e4fc267b437bb89990b2f2abf6c25765b89b72dd4a11e21934df449e0c976"}, - {file = "rpds_py-0.21.0-cp313-none-win32.whl", hash = "sha256:0c025820b78817db6a76413fff6866790786c38f95ea3f3d3c93dbb73b632202"}, - {file = "rpds_py-0.21.0-cp313-none-win_amd64.whl", hash = "sha256:320c808df533695326610a1b6a0a6e98f033e49de55d7dc36a13c8a30cfa756e"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2c51d99c30091f72a3c5d126fad26236c3f75716b8b5e5cf8effb18889ced928"}, - {file = "rpds_py-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:cbd7504a10b0955ea287114f003b7ad62330c9e65ba012c6223dba646f6ffd05"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6dcc4949be728ede49e6244eabd04064336012b37f5c2200e8ec8eb2988b209c"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f414da5c51bf350e4b7960644617c130140423882305f7574b6cf65a3081cecb"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9afe42102b40007f588666bc7de82451e10c6788f6f70984629db193849dced1"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3b929c2bb6e29ab31f12a1117c39f7e6d6450419ab7464a4ea9b0b417174f044"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8404b3717da03cbf773a1d275d01fec84ea007754ed380f63dfc24fb76ce4592"}, - {file = "rpds_py-0.21.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e12bb09678f38b7597b8346983d2323a6482dcd59e423d9448108c1be37cac9d"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:58a0e345be4b18e6b8501d3b0aa540dad90caeed814c515e5206bb2ec26736fd"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:c3761f62fcfccf0864cc4665b6e7c3f0c626f0380b41b8bd1ce322103fa3ef87"}, - {file = "rpds_py-0.21.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c2b2f71c6ad6c2e4fc9ed9401080badd1469fa9889657ec3abea42a3d6b2e1ed"}, - {file = "rpds_py-0.21.0-cp39-none-win32.whl", hash = "sha256:b21747f79f360e790525e6f6438c7569ddbfb1b3197b9e65043f25c3c9b489d8"}, - {file = "rpds_py-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:0626238a43152918f9e72ede9a3b6ccc9e299adc8ade0d67c5e142d564c9a83d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:6b4ef7725386dc0762857097f6b7266a6cdd62bfd209664da6712cb26acef035"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6bc0e697d4d79ab1aacbf20ee5f0df80359ecf55db33ff41481cf3e24f206919"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:da52d62a96e61c1c444f3998c434e8b263c384f6d68aca8274d2e08d1906325c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:98e4fe5db40db87ce1c65031463a760ec7906ab230ad2249b4572c2fc3ef1f9f"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:30bdc973f10d28e0337f71d202ff29345320f8bc49a31c90e6c257e1ccef4333"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:faa5e8496c530f9c71f2b4e1c49758b06e5f4055e17144906245c99fa6d45356"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:32eb88c30b6a4f0605508023b7141d043a79b14acb3b969aa0b4f99b25bc7d4a"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a89a8ce9e4e75aeb7fa5d8ad0f3fecdee813802592f4f46a15754dcb2fd6b061"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:241e6c125568493f553c3d0fdbb38c74babf54b45cef86439d4cd97ff8feb34d"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:3b766a9f57663396e4f34f5140b3595b233a7b146e94777b97a8413a1da1be18"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:af4a644bf890f56e41e74be7d34e9511e4954894d544ec6b8efe1e21a1a8da6c"}, - {file = "rpds_py-0.21.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:3e30a69a706e8ea20444b98a49f386c17b26f860aa9245329bab0851ed100677"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:031819f906bb146561af051c7cef4ba2003d28cff07efacef59da973ff7969ba"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b876f2bc27ab5954e2fd88890c071bd0ed18b9c50f6ec3de3c50a5ece612f7a6"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dc5695c321e518d9f03b7ea6abb5ea3af4567766f9852ad1560f501b17588c7b"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:b4de1da871b5c0fd5537b26a6fc6814c3cc05cabe0c941db6e9044ffbb12f04a"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:878f6fea96621fda5303a2867887686d7a198d9e0f8a40be100a63f5d60c88c9"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a8eeec67590e94189f434c6d11c426892e396ae59e4801d17a93ac96b8c02a6c"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1ff2eba7f6c0cb523d7e9cff0903f2fe1feff8f0b2ceb6bd71c0e20a4dcee271"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:a429b99337062877d7875e4ff1a51fe788424d522bd64a8c0a20ef3021fdb6ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d167e4dbbdac48bd58893c7e446684ad5d425b407f9336e04ab52e8b9194e2ed"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4eb2de8a147ffe0626bfdc275fc6563aa7bf4b6db59cf0d44f0ccd6ca625a24e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:e78868e98f34f34a88e23ee9ccaeeec460e4eaf6db16d51d7a9b883e5e785a5e"}, - {file = "rpds_py-0.21.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:4991ca61656e3160cdaca4851151fd3f4a92e9eba5c7a530ab030d6aee96ec89"}, - {file = "rpds_py-0.21.0.tar.gz", hash = "sha256:ed6378c9d66d0de903763e7706383d60c33829581f0adff47b6535f1802fa6db"}, + {file = "rpds_py-0.22.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a4366f264fa60d3c109f0b27af0cd9eb8d46746bd70bd3d9d425f035b6c7e286"}, + {file = "rpds_py-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e34a3e665d38d0749072e6565400c8ce9abae976e338919a0dfbfb0e1ba43068"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38cacf1f378571450576f2c8ce87da6f3fddc59d744de5c12b37acc23285b1e1"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8cbb040fec8eddd5a6a75e737fd73c9ce37e51f94bacdd0b178d0174a4758395"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d80fd710b3307a3c63809048b72c536689b9b0b31a2518339c3f1a4d29c73d7a"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b5d17d8f5b885ce50e0cda85f99c0719e365e98b587338535fa566a48375afb"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7a048ec1ebc991331d709be4884dc318c9eaafa66dcde8be0933ac0e702149"}, + {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:306da3dfa174b489a3fc63b0872e2226a5ddf94c59875a770d72aff945d5ed96"}, + {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c7b4450093c0c909299770226fb0285be47b0a57545bae25b5c4e51566b0e587"}, + {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0903ffdb5b9007e503203b6285e4ff0faf96d875c19f1d103b475acf7d9f7311"}, + {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d1522025cda9e57329aade769f56e5793b2a5da7759a21914ee10e67e17e601e"}, + {file = "rpds_py-0.22.0-cp310-cp310-win32.whl", hash = "sha256:49e084d47a66027ac72844f9f52f13d347a9a1f05d4f84381b420e47f836a7fd"}, + {file = "rpds_py-0.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:d9ceca96df54cb1675a0b7f52f1c6d5d1df62c5b40741ba211780f1b05a282a2"}, + {file = "rpds_py-0.22.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:771c9a3851beaa617d8c8115d65f834a2b52490f42ee2b88b13f1fc5529e9e0c"}, + {file = "rpds_py-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:341a07a4b55126bfae68c9bf24220a73d456111e5eb3dcbdab9fd16de2341224"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7649c8b8e4bd1ccc5fcbd51a855d57a617deeba19c66e3d04b1abecc61036b2"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f513758e7cda8bc262e80299a8e3395d7ef7f4ae705be62632f229bc6c33208"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba1fc34d0b2f6fd53377a4c954116251eba6d076bf64f903311f4a7d27d10acd"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:632d2fdddd9fbe3ac8896a119fd18a71fc95ca9c4cbe5223096c142d8c4a2b1d"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:326e42f2b49462e05f8527a1311ce98f9f97c484b3e443ec0ea4638bed3aebcf"}, + {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9bbdba9e75b1a9ee1dd1335034dad998ef1acc08492226c6fd50aa773bdfa7d"}, + {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:41f65a97bf2c4b161c9f8f89bc37058346bec9b36e373c8ad00a16c957bff625"}, + {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0686f2c16eafdc2c6b4ce6e86e5b3092e87db09ae64be2787616444eb35b9756"}, + {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e7c9aa2353eb0b0d845323857197daa036c2ff8624df990b0d886d22a8f665e"}, + {file = "rpds_py-0.22.0-cp311-cp311-win32.whl", hash = "sha256:2d2fc3ab021be3e0b5aec6d4164f2689d231b8bfc5185cc454314746aa4aee72"}, + {file = "rpds_py-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:87453d491369cd8018016d2714a13e8461975161703c18ee31eecf087a8ae5d4"}, + {file = "rpds_py-0.22.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e9d4293b21c69ee4f9e1a99ac4f772951d345611c614a0cfae2ec6b565279bc9"}, + {file = "rpds_py-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:67e013a17a3db4d98cc228fd5aeb36a51b0f5cf7330b9102a552060f1fe4e560"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b639a19e1791b646d27f15d17530a51722cc728d43b2dff3aeb904f92d91bac"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1357c3092702078b7782b6ebd5ba9b22c1a291c34fbf9d8f1a48237466ac7758"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:842855bbb113a19c393c6de5aa6ed9a26c6b13c2fead5e49114d39f0d08b94d8"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae7927cd2b869ca4dc645169d8af5494a29c99afd0ea0f24dd00c811ab1d8b8"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91bfef5daa2a5a4fe62f8d317fc91a626073639f951f851bd2cb252d01bc6c5"}, + {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fc4824e38c1e91a73bc820e7caacaf19d0acd557465aceef0420ca59489b390"}, + {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:92d28a608127b357da47c99e0d0e0655ca2060286540fe9f2a25a2e8ac666e05"}, + {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c637188b930175c256f13adbfc427b83ec7e64476d1ec9d6608f312bb84e06c3"}, + {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93bbd66f46dddc41e8c656130c97c0fb515e0fa44e1eebb2592769dbbd41b2f5"}, + {file = "rpds_py-0.22.0-cp312-cp312-win32.whl", hash = "sha256:54d8f94dec5765a9edc19610fecf0fdf9cab36cbb9def1213188215f735a6f98"}, + {file = "rpds_py-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:931bf3d0705b2834fed29354f35170fa022fe22a95542b61b7c66aca5f8a224f"}, + {file = "rpds_py-0.22.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2a57300cc8b034c5707085249efd09f19116bb80278d0ec925d7f3710165c510"}, + {file = "rpds_py-0.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c398a5a8e258dfdc5ea2aa4e5aa2ca3207f654a8eb268693dd1a76939074a588"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6cc4eb1e86364331928acafb2bb41d8ab735ca3caf2d6019b9f6dac3f4f65d"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:574c5c94213bc9990805bfd7e4ba3826d3c098516cbc19f0d0ef0433ad93fa06"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0321bc03a1c513eca1837e3bba948b975bcf3a172aebc197ab3573207f137a"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d276280649305c1da6cdd84585d48ae1f0efa67434d8b10d2df95228e59a05bb"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c17b43fe9c6da16885e3fe28922bcd1a029e61631fb771c7d501019b40bcc904"}, + {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48c95997af9314f4034fe5ba2d837399e786586e220835a578d28fe8161e6ae5"}, + {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9aa4af6b879bb75a3c7766fbf49d77f4097dd12b548ecbbd8b3f85caa833281"}, + {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8426f97117b914b9bfb2a7bd46edc148e8defda728a55a5df3a564abe70cd7a4"}, + {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:034964ea0ea09645bdde13038b38abb14be0aa747f20fcfab6181207dd9e0483"}, + {file = "rpds_py-0.22.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:3dc7c64b56b82428894f056e9ff6e8ee917ff74fc26b65211a33602c2372e928"}, + {file = "rpds_py-0.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1212cb231f2002934cd8d71a0d718fdd9d9a2dd671e0feef8501038df3508026"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f21e1278c9456cd601832375c778ca44614d3433996488221a56572c223f04a"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:875fe8dffb43c20f68379ee098b035a7038d7903c795d46715f66575a7050b19"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e23dcdd4b2ff9c6b3317ea7921b210d39592f8ca1cdea58ada25b202c65c0a69"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fb8efc9e579acf1e556fd86277fecec320c21ca9b5d39db96433ad8c45bc4a"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe23687924b25a2dee52fab15976fd6577ed8518072bcda9ff2e2b88ab1f168b"}, + {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5469b347445d1c31105f33e7bfc9a8ba213d48e42641a610dda65bf9e3c83f5"}, + {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a810a57ce5e8ecf8eac6ec4dab534ff80c34e5a2c31db60e992009cd20f58e0f"}, + {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d9bb9242b38a664f307b3b897f093896f7ed51ef4fe25a0502e5a368de9151ea"}, + {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b4660943030406aaa40ec9f51960dd88049903d9536bc3c8ebb5cc4e1f119bbe"}, + {file = "rpds_py-0.22.0-cp313-cp313t-win32.whl", hash = "sha256:208ce1d8e3af138d1d9b21d7206356b7f29b96675e0113aea652cf024e4ddfdc"}, + {file = "rpds_py-0.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e6da2e0500742e0f157f005924a0589f2e2dcbfdd6cd0cc0abce367433e989be"}, + {file = "rpds_py-0.22.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f980a0640599a74f27fd9d50c84c293f1cb7afc2046c5c6d3efaf8ec7cdbc326"}, + {file = "rpds_py-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca505fd3767a09a139737f3278bc8a485cb64043062da89bcba27e2f2ea78d33"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba235e00e0878ba1080b0f2a761f143b2a2d1c354f3d8e507fbf2f3de401bf18"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81e7a27365b02fe70a77f1365376879917235b3fec551d19b4c91b51d0bc1d07"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32a0e24cab2daae0503b06666d516e90a080c1a95aff0406b9f03c6489177c4b"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a73ed43d64209e853bba567a543170267a5cd64f359540b0ca2d597e329ba172"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0abcce5e874474d3eab5ad53be03dae2abe651d248bdeaabe83708e82969e78"}, + {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4e9946c8c7def17e4fcb5eddb14c4eb6ebc7f6f309075e6c8d23b133c104607"}, + {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:758098b38c344d9a7f279baf0689261777e601f620078ef5afdc9bd3339965c3"}, + {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9ad4640a409bc2b7d22b7921e7660f0db96c5c8c69fbb2e8f3261d4f71d33983"}, + {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8c48fc7458fe3a74dcdf56ba3534ff41bd421f69436df09ff3497fdaac18b431"}, + {file = "rpds_py-0.22.0-cp39-cp39-win32.whl", hash = "sha256:fde778947304e55fc732bc8ea5c6063e74244ac1808471cb498983a210aaf62c"}, + {file = "rpds_py-0.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:5fdf91a7c07f40e47b193f2acae0ed9da35d09325d7c3c3279f722b7cbf3d264"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c8fd7a16f7a047e06c747cfcf2acef3ac316132df1c6077445b29ee6f3f3a70b"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b6e4bcfc32f831bfe3d6d8a5acedfbfd5e252a03c83fa24813b277a3a8a13ca"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eadd2417e83a77ce3ae4a0efd08cb0ebdfd317b6406d11020354a53ad458ec84"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9dc2113e0cf0dd637751ca736186fca63664939ceb9f9f67e93ade88c69c0c9"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc2c00acdf68f1f69a476b770af311a7dc3955b7de228b04a40bcc51ac4d743b"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfdabdf8519c93908b2bf0f87c3f86f9e88bab279fb4acfd0907519ca5a1739f"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8338db3c76833d02dc21c3e2c42534091341d26e4f7ba32c6032bb558a02e07b"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ad4dfda52e64af3202ceb2143a62deba97894b71c64a4405ee80f6b3ea77285"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3b94b074dcce39976db22ea75c7aea8b22d95e6d3b62f76e20e1179a278521d8"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d4f2af3107fe4dc40c0d1a2409863f5249c6796398a1d83c1d99a0b3fa6cfb8d"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:bb11809b0de643a292a82f728c494a2bbef0e30a7c42d37464abbd6bef7ca7b1"}, + {file = "rpds_py-0.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c1c21030ed494deb10226f90e2dbd84a012d59810c409832714a3dd576527be2"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:64a0c965a1e299c9b280006bdb15c276c427c45360aed676305dc36bcaa4d13c"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2498ff422823be087b48bc82710deb87ac34f6b7c8034ee39920647647de1e60"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59e63da174ff287db05ef7c21d75974a5bac727ed60452aeb3a14278477842a8"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1c04fb380bc8efaae2fdf17ed6cd5d223da78a8b0b18a610f53d4c5d6e31dfd"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04919ffa9a728c446b27b6b625fa1d00ece221bdb9d633e978a7e0353a12c0e"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24c28df05bd284879d0fac850ba697077d2a33b7ebcaea6318d6b6cdfdc86ddc"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33622dc63c295788eed09dbb1d11bed178909d3267b02d873116ee6be368244"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7539dbb8f705e13629ba6f23388976aad809e387f32a6e5c0712e4e8d9bfcce7"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b8906f537978da3f7f0bd1ba37b69f6a877bb43312023b086582707d2835bf2f"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:62ab12fe03ffc49978d29de9c31bbb216610157f7e5ca8e172fed6642aead3be"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:762206ba3bf1d6c8c9e0055871d3c0d5b074b7c3120193e6c067e7866f106ab1"}, + {file = "rpds_py-0.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed0102146574e5e9f079b2e1a06e6b5b12a691f9c74a65b93b7f3d4feda566c6"}, + {file = "rpds_py-0.22.0.tar.gz", hash = "sha256:32de71c393f126d8203e9815557c7ff4d72ed1ad3aa3f52f6c7938413176750a"}, ] [[package]] @@ -6030,11 +6029,6 @@ files = [ {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f60021ec1574e56632be2a36b946f8143bf4e5e6af4a06d85281adc22938e0dd"}, {file = "scikit_learn-1.5.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:394397841449853c2290a32050382edaec3da89e35b3e03d6cc966aebc6a8ae6"}, {file = "scikit_learn-1.5.2-cp312-cp312-win_amd64.whl", hash = "sha256:57cc1786cfd6bd118220a92ede80270132aa353647684efa385a74244a41e3b1"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:e9a702e2de732bbb20d3bad29ebd77fc05a6b427dc49964300340e4c9328b3f5"}, - {file = "scikit_learn-1.5.2-cp313-cp313-macosx_12_0_arm64.whl", hash = "sha256:b0768ad641981f5d3a198430a1d31c3e044ed2e8a6f22166b4d546a5116d7908"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:178ddd0a5cb0044464fc1bfc4cca5b1833bfc7bb022d70b05db8530da4bb3dd3"}, - {file = "scikit_learn-1.5.2-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f7284ade780084d94505632241bf78c44ab3b6f1e8ccab3d2af58e0e950f9c12"}, - {file = "scikit_learn-1.5.2-cp313-cp313-win_amd64.whl", hash = "sha256:b7b0f9a0b1040830d38c39b91b3a44e1b643f4b36e36567b80b7c6bd2202a27f"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:757c7d514ddb00ae249832fe87100d9c73c6ea91423802872d9e74970a0e40b9"}, {file = "scikit_learn-1.5.2-cp39-cp39-macosx_12_0_arm64.whl", hash = "sha256:52788f48b5d8bca5c0736c175fa6bdaab2ef00a8f536cda698db61bd89c551c1"}, {file = "scikit_learn-1.5.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:643964678f4b5fbdc95cbf8aec638acc7aa70f5f79ee2cdad1eec3df4ba6ead8"}, @@ -7532,93 +7526,93 @@ files = [ [[package]] name = "yarl" -version = "1.18.0" +version = "1.18.3" description = "Yet another URL library" optional = false python-versions = ">=3.9" files = [ - {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:074fee89caab89a97e18ef5f29060ef61ba3cae6cd77673acc54bfdd3214b7b7"}, - {file = "yarl-1.18.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:b026cf2c32daf48d90c0c4e406815c3f8f4cfe0c6dfccb094a9add1ff6a0e41a"}, - {file = "yarl-1.18.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:ae38bd86eae3ba3d2ce5636cc9e23c80c9db2e9cb557e40b98153ed102b5a736"}, - {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:685cc37f3f307c6a8e879986c6d85328f4c637f002e219f50e2ef66f7e062c1d"}, - {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8254dbfce84ee5d1e81051ee7a0f1536c108ba294c0fdb5933476398df0654f3"}, - {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:20de4a8b04de70c49698dc2390b7fd2d18d424d3b876371f9b775e2b462d4b41"}, - {file = "yarl-1.18.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b0a2074a37285570d54b55820687de3d2f2b9ecf1b714e482e48c9e7c0402038"}, - {file = "yarl-1.18.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3f576ed278860df2721a5d57da3381040176ef1d07def9688a385c8330db61a1"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:3a3709450a574d61be6ac53d582496014342ea34876af8dc17cc16da32826c9a"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:bd80ed29761490c622edde5dd70537ca8c992c2952eb62ed46984f8eff66d6e8"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:32141e13a1d5a48525e519c9197d3f4d9744d818d5c7d6547524cc9eccc8971e"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:8b8d3e4e014fb4274f1c5bf61511d2199e263909fb0b8bda2a7428b0894e8dc6"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:701bb4a8f4de191c8c0cc9a1e6d5142f4df880e9d1210e333b829ca9425570ed"}, - {file = "yarl-1.18.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:a45d94075ac0647621eaaf693c8751813a3eccac455d423f473ffed38c8ac5c9"}, - {file = "yarl-1.18.0-cp310-cp310-win32.whl", hash = "sha256:34176bfb082add67cb2a20abd85854165540891147f88b687a5ed0dc225750a0"}, - {file = "yarl-1.18.0-cp310-cp310-win_amd64.whl", hash = "sha256:73553bbeea7d6ec88c08ad8027f4e992798f0abc459361bf06641c71972794dc"}, - {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:b8e8c516dc4e1a51d86ac975b0350735007e554c962281c432eaa5822aa9765c"}, - {file = "yarl-1.18.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:2e6b4466714a73f5251d84b471475850954f1fa6acce4d3f404da1d55d644c34"}, - {file = "yarl-1.18.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:c893f8c1a6d48b25961e00922724732d00b39de8bb0b451307482dc87bddcd74"}, - {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:13aaf2bdbc8c86ddce48626b15f4987f22e80d898818d735b20bd58f17292ee8"}, - {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dd21c0128e301851de51bc607b0a6da50e82dc34e9601f4b508d08cc89ee7929"}, - {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:205de377bd23365cd85562c9c6c33844050a93661640fda38e0567d2826b50df"}, - {file = "yarl-1.18.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ed69af4fe2a0949b1ea1d012bf065c77b4c7822bad4737f17807af2adb15a73c"}, - {file = "yarl-1.18.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8e1c18890091aa3cc8a77967943476b729dc2016f4cfe11e45d89b12519d4a93"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:91b8fb9427e33f83ca2ba9501221ffaac1ecf0407f758c4d2f283c523da185ee"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:536a7a8a53b75b2e98ff96edb2dfb91a26b81c4fed82782035767db5a465be46"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:a64619a9c47c25582190af38e9eb382279ad42e1f06034f14d794670796016c0"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:c73a6bbc97ba1b5a0c3c992ae93d721c395bdbb120492759b94cc1ac71bc6350"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:a173401d7821a2a81c7b47d4e7d5c4021375a1441af0c58611c1957445055056"}, - {file = "yarl-1.18.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:7520e799b1f84e095cce919bd6c23c9d49472deeef25fe1ef960b04cca51c3fc"}, - {file = "yarl-1.18.0-cp311-cp311-win32.whl", hash = "sha256:c4cb992d8090d5ae5f7afa6754d7211c578be0c45f54d3d94f7781c495d56716"}, - {file = "yarl-1.18.0-cp311-cp311-win_amd64.whl", hash = "sha256:52c136f348605974c9b1c878addd6b7a60e3bf2245833e370862009b86fa4689"}, - {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1ece25e2251c28bab737bdf0519c88189b3dd9492dc086a1d77336d940c28ced"}, - {file = "yarl-1.18.0-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:454902dc1830d935c90b5b53c863ba2a98dcde0fbaa31ca2ed1ad33b2a7171c6"}, - {file = "yarl-1.18.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:01be8688fc211dc237e628fcc209dda412d35de7642453059a0553747018d075"}, - {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d26f1fa9fa2167bb238f6f4b20218eb4e88dd3ef21bb8f97439fa6b5313e30d"}, - {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b234a4a9248a9f000b7a5dfe84b8cb6210ee5120ae70eb72a4dcbdb4c528f72f"}, - {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fe94d1de77c4cd8caff1bd5480e22342dbd54c93929f5943495d9c1e8abe9f42"}, - {file = "yarl-1.18.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9b4c90c5363c6b0a54188122b61edb919c2cd1119684999d08cd5e538813a28e"}, - {file = "yarl-1.18.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49a98ecadc5a241c9ba06de08127ee4796e1009555efd791bac514207862b43d"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:9106025c7f261f9f5144f9aa7681d43867eed06349a7cfb297a1bc804de2f0d1"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:f275ede6199d0f1ed4ea5d55a7b7573ccd40d97aee7808559e1298fe6efc8dbd"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:f7edeb1dcc7f50a2c8e08b9dc13a413903b7817e72273f00878cb70e766bdb3b"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c083f6dd6951b86e484ebfc9c3524b49bcaa9c420cb4b2a78ef9f7a512bfcc85"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:80741ec5b471fbdfb997821b2842c59660a1c930ceb42f8a84ba8ca0f25a66aa"}, - {file = "yarl-1.18.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:b1a3297b9cad594e1ff0c040d2881d7d3a74124a3c73e00c3c71526a1234a9f7"}, - {file = "yarl-1.18.0-cp312-cp312-win32.whl", hash = "sha256:cd6ab7d6776c186f544f893b45ee0c883542b35e8a493db74665d2e594d3ca75"}, - {file = "yarl-1.18.0-cp312-cp312-win_amd64.whl", hash = "sha256:039c299a0864d1f43c3e31570045635034ea7021db41bf4842693a72aca8df3a"}, - {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:6fb64dd45453225f57d82c4764818d7a205ee31ce193e9f0086e493916bd4f72"}, - {file = "yarl-1.18.0-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:3adaaf9c6b1b4fc258584f4443f24d775a2086aee82d1387e48a8b4f3d6aecf6"}, - {file = "yarl-1.18.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:da206d1ec78438a563c5429ab808a2b23ad7bc025c8adbf08540dde202be37d5"}, - {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:576d258b21c1db4c6449b1c572c75d03f16a482eb380be8003682bdbe7db2f28"}, - {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c60e547c0a375c4bfcdd60eef82e7e0e8698bf84c239d715f5c1278a73050393"}, - {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e3818eabaefb90adeb5e0f62f047310079d426387991106d4fbf3519eec7d90a"}, - {file = "yarl-1.18.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a5f72421246c21af6a92fbc8c13b6d4c5427dfd949049b937c3b731f2f9076bd"}, - {file = "yarl-1.18.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7fa7d37f2ada0f42e0723632993ed422f2a679af0e200874d9d861720a54f53e"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:42ba84e2ac26a3f252715f8ec17e6fdc0cbf95b9617c5367579fafcd7fba50eb"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:6a49ad0102c0f0ba839628d0bf45973c86ce7b590cdedf7540d5b1833ddc6f00"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:96404e8d5e1bbe36bdaa84ef89dc36f0e75939e060ca5cd45451aba01db02902"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:a0509475d714df8f6d498935b3f307cd122c4ca76f7d426c7e1bb791bcd87eda"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:1ff116f0285b5c8b3b9a2680aeca29a858b3b9e0402fc79fd850b32c2bcb9f8b"}, - {file = "yarl-1.18.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:e2580c1d7e66e6d29d6e11855e3b1c6381971e0edd9a5066e6c14d79bc8967af"}, - {file = "yarl-1.18.0-cp313-cp313-win32.whl", hash = "sha256:14408cc4d34e202caba7b5ac9cc84700e3421a9e2d1b157d744d101b061a4a88"}, - {file = "yarl-1.18.0-cp313-cp313-win_amd64.whl", hash = "sha256:1db1537e9cb846eb0ff206eac667f627794be8b71368c1ab3207ec7b6f8c5afc"}, - {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:fa2c9cb607e0f660d48c54a63de7a9b36fef62f6b8bd50ff592ce1137e73ac7d"}, - {file = "yarl-1.18.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c0f4808644baf0a434a3442df5e0bedf8d05208f0719cedcd499e168b23bfdc4"}, - {file = "yarl-1.18.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:7db9584235895a1dffca17e1c634b13870852094f6389b68dcc6338086aa7b08"}, - {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:309f8d27d6f93ceeeb80aa6980e883aa57895270f7f41842b92247e65d7aeddf"}, - {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:609ffd44fed2ed88d9b4ef62ee860cf86446cf066333ad4ce4123505b819e581"}, - {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f172b8b2c72a13a06ea49225a9c47079549036ad1b34afa12d5491b881f5b993"}, - {file = "yarl-1.18.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d89ae7de94631b60d468412c18290d358a9d805182373d804ec839978b120422"}, - {file = "yarl-1.18.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:466d31fd043ef9af822ee3f1df8fdff4e8c199a7f4012c2642006af240eade17"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:7609b8462351c4836b3edce4201acb6dd46187b207c589b30a87ffd1813b48dc"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:d9d4f5e471e8dc49b593a80766c2328257e405f943c56a3dc985c125732bc4cf"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:67b336c15e564d76869c9a21316f90edf546809a5796a083b8f57c845056bc01"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:b212452b80cae26cb767aa045b051740e464c5129b7bd739c58fbb7deb339e7b"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:38b39b7b3e692b6c92b986b00137a3891eddb66311b229d1940dcbd4f025083c"}, - {file = "yarl-1.18.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:a7ee6884a8848792d58b854946b685521f41d8871afa65e0d4a774954e9c9e89"}, - {file = "yarl-1.18.0-cp39-cp39-win32.whl", hash = "sha256:b4095c5019bb889aa866bf12ed4c85c0daea5aafcb7c20d1519f02a1e738f07f"}, - {file = "yarl-1.18.0-cp39-cp39-win_amd64.whl", hash = "sha256:2d90f2e4d16a5b0915ee065218b435d2ef619dd228973b1b47d262a6f7cd8fa5"}, - {file = "yarl-1.18.0-py3-none-any.whl", hash = "sha256:dbf53db46f7cf176ee01d8d98c39381440776fcda13779d269a8ba664f69bec0"}, - {file = "yarl-1.18.0.tar.gz", hash = "sha256:20d95535e7d833889982bfe7cc321b7f63bf8879788fee982c76ae2b24cfb715"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:7df647e8edd71f000a5208fe6ff8c382a1de8edfbccdbbfe649d263de07d8c34"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:c69697d3adff5aa4f874b19c0e4ed65180ceed6318ec856ebc423aa5850d84f7"}, + {file = "yarl-1.18.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:602d98f2c2d929f8e697ed274fbadc09902c4025c5a9963bf4e9edfc3ab6f7ed"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c654d5207c78e0bd6d749f6dae1dcbbfde3403ad3a4b11f3c5544d9906969dde"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5094d9206c64181d0f6e76ebd8fb2f8fe274950a63890ee9e0ebfd58bf9d787b"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:35098b24e0327fc4ebdc8ffe336cee0a87a700c24ffed13161af80124b7dc8e5"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3236da9272872443f81fedc389bace88408f64f89f75d1bdb2256069a8730ccc"}, + {file = "yarl-1.18.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e2c08cc9b16f4f4bc522771d96734c7901e7ebef70c6c5c35dd0f10845270bcd"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:80316a8bd5109320d38eef8833ccf5f89608c9107d02d2a7f985f98ed6876990"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_armv7l.whl", hash = "sha256:c1e1cc06da1491e6734f0ea1e6294ce00792193c463350626571c287c9a704db"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fea09ca13323376a2fdfb353a5fa2e59f90cd18d7ca4eaa1fd31f0a8b4f91e62"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:e3b9fd71836999aad54084906f8663dffcd2a7fb5cdafd6c37713b2e72be1760"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:757e81cae69244257d125ff31663249b3013b5dc0a8520d73694aed497fb195b"}, + {file = "yarl-1.18.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:b1771de9944d875f1b98a745bc547e684b863abf8f8287da8466cf470ef52690"}, + {file = "yarl-1.18.3-cp310-cp310-win32.whl", hash = "sha256:8874027a53e3aea659a6d62751800cf6e63314c160fd607489ba5c2edd753cf6"}, + {file = "yarl-1.18.3-cp310-cp310-win_amd64.whl", hash = "sha256:93b2e109287f93db79210f86deb6b9bbb81ac32fc97236b16f7433db7fc437d8"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:8503ad47387b8ebd39cbbbdf0bf113e17330ffd339ba1144074da24c545f0069"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:02ddb6756f8f4517a2d5e99d8b2f272488e18dd0bfbc802f31c16c6c20f22193"}, + {file = "yarl-1.18.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:67a283dd2882ac98cc6318384f565bffc751ab564605959df4752d42483ad889"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d980e0325b6eddc81331d3f4551e2a333999fb176fd153e075c6d1c2530aa8a8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b643562c12680b01e17239be267bc306bbc6aac1f34f6444d1bded0c5ce438ca"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c017a3b6df3a1bd45b9fa49a0f54005e53fbcad16633870104b66fa1a30a29d8"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:75674776d96d7b851b6498f17824ba17849d790a44d282929c42dbb77d4f17ae"}, + {file = "yarl-1.18.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ccaa3a4b521b780a7e771cc336a2dba389a0861592bbce09a476190bb0c8b4b3"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:2d06d3005e668744e11ed80812e61efd77d70bb7f03e33c1598c301eea20efbb"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_armv7l.whl", hash = "sha256:9d41beda9dc97ca9ab0b9888cb71f7539124bc05df02c0cff6e5acc5a19dcc6e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:ba23302c0c61a9999784e73809427c9dbedd79f66a13d84ad1b1943802eaaf59"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:6748dbf9bfa5ba1afcc7556b71cda0d7ce5f24768043a02a58846e4a443d808d"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:0b0cad37311123211dc91eadcb322ef4d4a66008d3e1bdc404808992260e1a0e"}, + {file = "yarl-1.18.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:0fb2171a4486bb075316ee754c6d8382ea6eb8b399d4ec62fde2b591f879778a"}, + {file = "yarl-1.18.3-cp311-cp311-win32.whl", hash = "sha256:61b1a825a13bef4a5f10b1885245377d3cd0bf87cba068e1d9a88c2ae36880e1"}, + {file = "yarl-1.18.3-cp311-cp311-win_amd64.whl", hash = "sha256:b9d60031cf568c627d028239693fd718025719c02c9f55df0a53e587aab951b5"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:1dd4bdd05407ced96fed3d7f25dbbf88d2ffb045a0db60dbc247f5b3c5c25d50"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:7c33dd1931a95e5d9a772d0ac5e44cac8957eaf58e3c8da8c1414de7dd27c576"}, + {file = "yarl-1.18.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:25b411eddcfd56a2f0cd6a384e9f4f7aa3efee14b188de13048c25b5e91f1640"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:436c4fc0a4d66b2badc6c5fc5ef4e47bb10e4fd9bf0c79524ac719a01f3607c2"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e35ef8683211db69ffe129a25d5634319a677570ab6b2eba4afa860f54eeaf75"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84b2deecba4a3f1a398df819151eb72d29bfeb3b69abb145a00ddc8d30094512"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:00e5a1fea0fd4f5bfa7440a47eff01d9822a65b4488f7cff83155a0f31a2ecba"}, + {file = "yarl-1.18.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d0e883008013c0e4aef84dcfe2a0b172c4d23c2669412cf5b3371003941f72bb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:5a3f356548e34a70b0172d8890006c37be92995f62d95a07b4a42e90fba54272"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_armv7l.whl", hash = "sha256:ccd17349166b1bee6e529b4add61727d3f55edb7babbe4069b5764c9587a8cc6"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:b958ddd075ddba5b09bb0be8a6d9906d2ce933aee81100db289badbeb966f54e"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:c7d79f7d9aabd6011004e33b22bc13056a3e3fb54794d138af57f5ee9d9032cb"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:4891ed92157e5430874dad17b15eb1fda57627710756c27422200c52d8a4e393"}, + {file = "yarl-1.18.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:ce1af883b94304f493698b00d0f006d56aea98aeb49d75ec7d98cd4a777e9285"}, + {file = "yarl-1.18.3-cp312-cp312-win32.whl", hash = "sha256:f91c4803173928a25e1a55b943c81f55b8872f0018be83e3ad4938adffb77dd2"}, + {file = "yarl-1.18.3-cp312-cp312-win_amd64.whl", hash = "sha256:7e2ee16578af3b52ac2f334c3b1f92262f47e02cc6193c598502bd46f5cd1477"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:90adb47ad432332d4f0bc28f83a5963f426ce9a1a8809f5e584e704b82685dcb"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:913829534200eb0f789d45349e55203a091f45c37a2674678744ae52fae23efa"}, + {file = "yarl-1.18.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:ef9f7768395923c3039055c14334ba4d926f3baf7b776c923c93d80195624782"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88a19f62ff30117e706ebc9090b8ecc79aeb77d0b1f5ec10d2d27a12bc9f66d0"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e17c9361d46a4d5addf777c6dd5eab0715a7684c2f11b88c67ac37edfba6c482"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a74a13a4c857a84a845505fd2d68e54826a2cd01935a96efb1e9d86c728e186"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:41f7ce59d6ee7741af71d82020346af364949314ed3d87553763a2df1829cc58"}, + {file = "yarl-1.18.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f52a265001d830bc425f82ca9eabda94a64a4d753b07d623a9f2863fde532b53"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:82123d0c954dc58db301f5021a01854a85bf1f3bb7d12ae0c01afc414a882ca2"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_armv7l.whl", hash = "sha256:2ec9bbba33b2d00999af4631a3397d1fd78290c48e2a3e52d8dd72db3a067ac8"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:fbd6748e8ab9b41171bb95c6142faf068f5ef1511935a0aa07025438dd9a9bc1"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:877d209b6aebeb5b16c42cbb377f5f94d9e556626b1bfff66d7b0d115be88d0a"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:b464c4ab4bfcb41e3bfd3f1c26600d038376c2de3297760dfe064d2cb7ea8e10"}, + {file = "yarl-1.18.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:8d39d351e7faf01483cc7ff7c0213c412e38e5a340238826be7e0e4da450fdc8"}, + {file = "yarl-1.18.3-cp313-cp313-win32.whl", hash = "sha256:61ee62ead9b68b9123ec24bc866cbef297dd266175d53296e2db5e7f797f902d"}, + {file = "yarl-1.18.3-cp313-cp313-win_amd64.whl", hash = "sha256:578e281c393af575879990861823ef19d66e2b1d0098414855dd367e234f5b3c"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:61e5e68cb65ac8f547f6b5ef933f510134a6bf31bb178be428994b0cb46c2a04"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:fe57328fbc1bfd0bd0514470ac692630f3901c0ee39052ae47acd1d90a436719"}, + {file = "yarl-1.18.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:a440a2a624683108a1b454705ecd7afc1c3438a08e890a1513d468671d90a04e"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09c7907c8548bcd6ab860e5f513e727c53b4a714f459b084f6580b49fa1b9cee"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4f6450109834af88cb4cc5ecddfc5380ebb9c228695afc11915a0bf82116789"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a9ca04806f3be0ac6d558fffc2fdf8fcef767e0489d2684a21912cc4ed0cd1b8"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:77a6e85b90a7641d2e07184df5557132a337f136250caafc9ccaa4a2a998ca2c"}, + {file = "yarl-1.18.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6333c5a377c8e2f5fae35e7b8f145c617b02c939d04110c76f29ee3676b5f9a5"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:0b3c92fa08759dbf12b3a59579a4096ba9af8dd344d9a813fc7f5070d86bbab1"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_armv7l.whl", hash = "sha256:4ac515b860c36becb81bb84b667466885096b5fc85596948548b667da3bf9f24"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:045b8482ce9483ada4f3f23b3774f4e1bf4f23a2d5c912ed5170f68efb053318"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:a4bb030cf46a434ec0225bddbebd4b89e6471814ca851abb8696170adb163985"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:54d6921f07555713b9300bee9c50fb46e57e2e639027089b1d795ecd9f7fa910"}, + {file = "yarl-1.18.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:1d407181cfa6e70077df3377938c08012d18893f9f20e92f7d2f314a437c30b1"}, + {file = "yarl-1.18.3-cp39-cp39-win32.whl", hash = "sha256:ac36703a585e0929b032fbaab0707b75dc12703766d0b53486eabd5139ebadd5"}, + {file = "yarl-1.18.3-cp39-cp39-win_amd64.whl", hash = "sha256:ba87babd629f8af77f557b61e49e7c7cac36f22f871156b91e10a6e9d4f829e9"}, + {file = "yarl-1.18.3-py3-none-any.whl", hash = "sha256:b57f4f58099328dfb26c6a771d09fb20dbbae81d20cfb66141251ea063bd101b"}, + {file = "yarl-1.18.3.tar.gz", hash = "sha256:ac1801c45cbf77b6c99242eeff4fffb5e4e73a800b5c4ad4fc0be5def634d2e1"}, ] [package.dependencies] @@ -7653,4 +7647,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "ee3b3d938295f0057567c10fb808a0d95ed2fe9a32f459d489b4b29aacf710c8" +content-hash = "33ee730cf750e618ec005ad44ad09617bc8f95632b30ac02b5290a03a33bdf5b" diff --git a/pyproject.toml b/pyproject.toml index ed030471..6620c6f8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -90,10 +90,13 @@ langchain-huggingface = "^0.0.3" langchain-milvus = "^0.1.4" langchain-text-splitters = "^0.2.4" +[tool.poetry.group.constraints] +optional = true + [tool.poetry.group.constraints.dependencies] numpy = [ - { version = "^2.1.0", markers = 'python_version >= "3.13"' }, - { version = "^1.24.4", markers = 'python_version < "3.13"' }, + { version = ">=1.24.4,<3.0.0", markers = 'python_version >= "3.10"' }, + { version = ">=1.24.4,<2.1.0", markers = 'python_version < "3.10"' }, ] [tool.poetry.group.mac_intel] From 2254845da35001ad7026208fb415db7c9d811b2b Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Dec 2024 10:47:29 +0000 Subject: [PATCH 33/40] chore: bump version to 2.8.2 [skip ci] --- CHANGELOG.md | 18 ++++++++++++++++++ pyproject.toml | 2 +- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c77d4ab3..77486960 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,21 @@ +## [v2.8.2](https://github.com/DS4SD/docling/releases/tag/v2.8.2) - 2024-12-03 + +### Fix + +* ParserError EOF inside string (#470) ([#472](https://github.com/DS4SD/docling/issues/472)) ([`c90c41c`](https://github.com/DS4SD/docling/commit/c90c41c391de4366db554d7a71ce9a35467c981e)) +* PermissionError when using tesseract_ocr_cli_model ([#496](https://github.com/DS4SD/docling/issues/496)) ([`d3f84b2`](https://github.com/DS4SD/docling/commit/d3f84b2457125feacd0c21d6513e7ae69a308ea5)) + +### Documentation + +* Add styling for faq ([#502](https://github.com/DS4SD/docling/issues/502)) ([`5ba3807`](https://github.com/DS4SD/docling/commit/5ba3807f315a01b1a4e8df9bab40e34a4238205a)) +* Typo in faq ([#484](https://github.com/DS4SD/docling/issues/484)) ([`33cff98`](https://github.com/DS4SD/docling/commit/33cff98d360c02a382a66850c696a0cf511659ac)) +* Add automatic api reference ([#475](https://github.com/DS4SD/docling/issues/475)) ([`d487210`](https://github.com/DS4SD/docling/commit/d4872103b8f24e38b37a8cd3ac414d3e02e7d6e8)) +* Introduce faq section ([#468](https://github.com/DS4SD/docling/issues/468)) ([`8ccb3c6`](https://github.com/DS4SD/docling/commit/8ccb3c6db69318789af7deec26cfa2a3fd71302e)) + +### Performance + +* Prevent temp file leftovers, reuse core type ([#487](https://github.com/DS4SD/docling/issues/487)) ([`051789d`](https://github.com/DS4SD/docling/commit/051789d01706d3823dd6307eca4dc5faacd1b7ce)) + ## [v2.8.1](https://github.com/DS4SD/docling/releases/tag/v2.8.1) - 2024-11-29 ### Fix diff --git a/pyproject.toml b/pyproject.toml index 6620c6f8..b6b832c8 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.8.1" # DO NOT EDIT, updated automatically +version = "2.8.2" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 34c7c798580476a86ce8abec30b1115fbb36fdd8 Mon Sep 17 00:00:00 2001 From: Christoph Auer <60343111+cau-git@users.noreply.github.com> Date: Tue, 3 Dec 2024 12:45:32 +0100 Subject: [PATCH 34/40] fix: improve handling of disallowed formats (#429) * fix: Fixes and tests for StopIteration on .convert() Signed-off-by: Christoph Auer * fix: Remove unnecessary case handling Signed-off-by: Christoph Auer * fix: Other test fixes Signed-off-by: Christoph Auer * improve handling of unsupported types - Introduced new explicit exception types instead of `RuntimeError` - Introduced new `ConversionStatus` value for unsupported formats - Tidied up converter member typing & removed asserts Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * robustify & simplify format option resolution Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> * rename new status, populate ConversionResult errors Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --------- Signed-off-by: Christoph Auer Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Co-authored-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --- docling/datamodel/base_models.py | 2 + docling/datamodel/document.py | 34 ++++-- docling/document_converter.py | 186 +++++++++++++++++-------------- docling/exceptions.py | 6 + tests/test_interfaces.py | 2 +- tests/test_invalid_input.py | 45 ++++++++ 6 files changed, 181 insertions(+), 94 deletions(-) create mode 100644 docling/exceptions.py create mode 100644 tests/test_invalid_input.py diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index 8e584f4b..55a19ac3 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -24,6 +24,7 @@ class ConversionStatus(str, Enum): FAILURE = auto() SUCCESS = auto() PARTIAL_SUCCESS = auto() + SKIPPED = auto() class InputFormat(str, Enum): @@ -95,6 +96,7 @@ class DoclingComponentType(str, Enum): DOCUMENT_BACKEND = auto() MODEL = auto() DOC_ASSEMBLER = auto() + USER_INPUT = auto() class ErrorItem(BaseModel): diff --git a/docling/datamodel/document.py b/docling/datamodel/document.py index 2fadb7f9..e5b49343 100644 --- a/docling/datamodel/document.py +++ b/docling/datamodel/document.py @@ -3,7 +3,7 @@ import re from enum import Enum from io import BytesIO from pathlib import Path, PurePath -from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Type, Union +from typing import TYPE_CHECKING, Dict, Iterable, List, Optional, Set, Type, Union import filetype from docling_core.types.doc import ( @@ -164,12 +164,6 @@ class InputDocument(BaseModel): backend: Type[AbstractDocumentBackend], path_or_stream: Union[BytesIO, Path], ) -> None: - if backend is None: - raise RuntimeError( - f"No backend configuration provided for file {self.file.name} with format {self.format}. " - f"Please check your format configuration on DocumentConverter." - ) - self._backend = backend(self, path_or_stream=path_or_stream) if not self._backend.is_valid(): self.valid = False @@ -450,6 +444,25 @@ class ConversionResult(BaseModel): return ds_doc +class _DummyBackend(AbstractDocumentBackend): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + + def is_valid(self) -> bool: + return False + + @classmethod + def supported_formats(cls) -> Set[InputFormat]: + return set() + + @classmethod + def supports_pagination(cls) -> bool: + return False + + def unload(self): + return super().unload() + + class _DocumentConversionInput(BaseModel): path_or_stream_iterator: Iterable[Union[Path, str, DocumentStream]] @@ -461,11 +474,12 @@ class _DocumentConversionInput(BaseModel): for item in self.path_or_stream_iterator: obj = resolve_source_to_stream(item) if isinstance(item, str) else item format = self._guess_format(obj) + backend: Type[AbstractDocumentBackend] if format not in format_options.keys(): - _log.info( - f"Skipping input document {obj.name} because it isn't matching any of the allowed formats." + _log.error( + f"Input document {obj.name} does not match any allowed format." ) - continue + backend = _DummyBackend else: backend = format_options[format].backend diff --git a/docling/document_converter.py b/docling/document_converter.py index 74e6f84a..503a4c5b 100644 --- a/docling/document_converter.py +++ b/docling/document_converter.py @@ -15,7 +15,13 @@ from docling.backend.md_backend import MarkdownDocumentBackend from docling.backend.msexcel_backend import MsExcelDocumentBackend from docling.backend.mspowerpoint_backend import MsPowerpointDocumentBackend from docling.backend.msword_backend import MsWordDocumentBackend -from docling.datamodel.base_models import ConversionStatus, DocumentStream, InputFormat +from docling.datamodel.base_models import ( + ConversionStatus, + DoclingComponentType, + DocumentStream, + ErrorItem, + InputFormat, +) from docling.datamodel.document import ( ConversionResult, InputDocument, @@ -23,6 +29,7 @@ from docling.datamodel.document import ( ) from docling.datamodel.pipeline_options import PipelineOptions from docling.datamodel.settings import DocumentLimits, settings +from docling.exceptions import ConversionError from docling.pipeline.base_pipeline import BasePipeline from docling.pipeline.simple_pipeline import SimplePipeline from docling.pipeline.standard_pdf_pipeline import StandardPdfPipeline @@ -85,32 +92,37 @@ class ImageFormatOption(FormatOption): backend: Type[AbstractDocumentBackend] = DoclingParseDocumentBackend -_format_to_default_options = { - InputFormat.XLSX: FormatOption( - pipeline_cls=SimplePipeline, backend=MsExcelDocumentBackend - ), - InputFormat.DOCX: FormatOption( - pipeline_cls=SimplePipeline, backend=MsWordDocumentBackend - ), - InputFormat.PPTX: FormatOption( - pipeline_cls=SimplePipeline, backend=MsPowerpointDocumentBackend - ), - InputFormat.MD: FormatOption( - pipeline_cls=SimplePipeline, backend=MarkdownDocumentBackend - ), - InputFormat.ASCIIDOC: FormatOption( - pipeline_cls=SimplePipeline, backend=AsciiDocBackend - ), - InputFormat.HTML: FormatOption( - pipeline_cls=SimplePipeline, backend=HTMLDocumentBackend - ), - InputFormat.IMAGE: FormatOption( - pipeline_cls=StandardPdfPipeline, backend=DoclingParseDocumentBackend - ), - InputFormat.PDF: FormatOption( - pipeline_cls=StandardPdfPipeline, backend=DoclingParseDocumentBackend - ), -} +def _get_default_option(format: InputFormat) -> FormatOption: + format_to_default_options = { + InputFormat.XLSX: FormatOption( + pipeline_cls=SimplePipeline, backend=MsExcelDocumentBackend + ), + InputFormat.DOCX: FormatOption( + pipeline_cls=SimplePipeline, backend=MsWordDocumentBackend + ), + InputFormat.PPTX: FormatOption( + pipeline_cls=SimplePipeline, backend=MsPowerpointDocumentBackend + ), + InputFormat.MD: FormatOption( + pipeline_cls=SimplePipeline, backend=MarkdownDocumentBackend + ), + InputFormat.ASCIIDOC: FormatOption( + pipeline_cls=SimplePipeline, backend=AsciiDocBackend + ), + InputFormat.HTML: FormatOption( + pipeline_cls=SimplePipeline, backend=HTMLDocumentBackend + ), + InputFormat.IMAGE: FormatOption( + pipeline_cls=StandardPdfPipeline, backend=DoclingParseDocumentBackend + ), + InputFormat.PDF: FormatOption( + pipeline_cls=StandardPdfPipeline, backend=DoclingParseDocumentBackend + ), + } + if (options := format_to_default_options.get(format)) is not None: + return options + else: + raise RuntimeError(f"No default options configured for {format}") class DocumentConverter: @@ -121,36 +133,26 @@ class DocumentConverter: allowed_formats: Optional[List[InputFormat]] = None, format_options: Optional[Dict[InputFormat, FormatOption]] = None, ): - self.allowed_formats = allowed_formats - self.format_to_options = format_options - - if self.allowed_formats is None: - # if self.format_to_options is not None: - # self.allowed_formats = self.format_to_options.keys() - # else: - self.allowed_formats = [e for e in InputFormat] # all formats - - if self.format_to_options is None: - self.format_to_options = _format_to_default_options - else: - for f in self.allowed_formats: - if f not in self.format_to_options.keys(): - _log.debug(f"Requested format {f} will use default options.") - self.format_to_options[f] = _format_to_default_options[f] - - remove_keys = [] - for f in self.format_to_options.keys(): - if f not in self.allowed_formats: - remove_keys.append(f) - - for f in remove_keys: - self.format_to_options.pop(f) - + self.allowed_formats = ( + allowed_formats if allowed_formats is not None else [e for e in InputFormat] + ) + self.format_to_options = { + format: ( + _get_default_option(format=format) + if (custom_option := (format_options or {}).get(format)) is None + else custom_option + ) + for format in self.allowed_formats + } self.initialized_pipelines: Dict[Type[BasePipeline], BasePipeline] = {} def initialize_pipeline(self, format: InputFormat): """Initialize the conversion pipeline for the selected format.""" - self._get_pipeline(doc_format=format) + pipeline = self._get_pipeline(doc_format=format) + if pipeline is None: + raise ConversionError( + f"No pipeline could be initialized for format {format}" + ) @validate_call(config=ConfigDict(strict=True)) def convert( @@ -186,22 +188,28 @@ class DocumentConverter: limits=limits, ) conv_res_iter = self._convert(conv_input, raises_on_error=raises_on_error) + + had_result = False for conv_res in conv_res_iter: + had_result = True if raises_on_error and conv_res.status not in { ConversionStatus.SUCCESS, ConversionStatus.PARTIAL_SUCCESS, }: - raise RuntimeError( + raise ConversionError( f"Conversion failed for: {conv_res.input.file} with status: {conv_res.status}" ) else: yield conv_res + if not had_result and raises_on_error: + raise ConversionError( + f"Conversion failed because the provided file has no recognizable format or it wasn't in the list of allowed formats." + ) + def _convert( self, conv_input: _DocumentConversionInput, raises_on_error: bool ) -> Iterator[ConversionResult]: - assert self.format_to_options is not None - start_time = time.monotonic() for input_batch in chunkify( @@ -223,27 +231,22 @@ class DocumentConverter: ): elapsed = time.monotonic() - start_time start_time = time.monotonic() - - if item is not None: - _log.info( - f"Finished converting document {item.input.file.name} in {elapsed:.2f} sec." - ) - yield item - else: - _log.info(f"Skipped a document. We lost {elapsed:.2f} sec.") + _log.info( + f"Finished converting document {item.input.file.name} in {elapsed:.2f} sec." + ) + yield item def _get_pipeline(self, doc_format: InputFormat) -> Optional[BasePipeline]: - assert self.format_to_options is not None - fopt = self.format_to_options.get(doc_format) if fopt is None: - raise RuntimeError(f"Could not get pipeline for {doc_format}") + return None else: pipeline_class = fopt.pipeline_cls pipeline_options = fopt.pipeline_options - assert pipeline_options is not None + if pipeline_options is None: + return None # TODO this will ignore if different options have been defined for the same pipeline class. if ( pipeline_class not in self.initialized_pipelines @@ -257,11 +260,26 @@ class DocumentConverter: def _process_document( self, in_doc: InputDocument, raises_on_error: bool - ) -> Optional[ConversionResult]: - assert self.allowed_formats is not None - assert in_doc.format in self.allowed_formats + ) -> ConversionResult: - conv_res = self._execute_pipeline(in_doc, raises_on_error=raises_on_error) + valid = ( + self.allowed_formats is not None and in_doc.format in self.allowed_formats + ) + if valid: + conv_res = self._execute_pipeline(in_doc, raises_on_error=raises_on_error) + else: + error_message = f"File format not allowed: {in_doc.file}" + if raises_on_error: + raise ConversionError(error_message) + else: + error_item = ErrorItem( + component_type=DoclingComponentType.USER_INPUT, + module_name="", + error_message=error_message, + ) + conv_res = ConversionResult( + input=in_doc, status=ConversionStatus.SKIPPED, errors=[error_item] + ) return conv_res @@ -270,26 +288,28 @@ class DocumentConverter: ) -> ConversionResult: if in_doc.valid: pipeline = self._get_pipeline(in_doc.format) - if pipeline is None: # Can't find a default pipeline. Should this raise? + if pipeline is not None: + conv_res = pipeline.execute(in_doc, raises_on_error=raises_on_error) + else: if raises_on_error: - raise RuntimeError( + raise ConversionError( f"No pipeline could be initialized for {in_doc.file}." ) else: - conv_res = ConversionResult(input=in_doc) - conv_res.status = ConversionStatus.FAILURE - return conv_res - - conv_res = pipeline.execute(in_doc, raises_on_error=raises_on_error) - + conv_res = ConversionResult( + input=in_doc, + status=ConversionStatus.FAILURE, + ) else: if raises_on_error: - raise RuntimeError(f"Input document {in_doc.file} is not valid.") + raise ConversionError(f"Input document {in_doc.file} is not valid.") else: # invalid doc or not of desired format - conv_res = ConversionResult(input=in_doc) - conv_res.status = ConversionStatus.FAILURE + conv_res = ConversionResult( + input=in_doc, + status=ConversionStatus.FAILURE, + ) # TODO add error log why it failed. return conv_res diff --git a/docling/exceptions.py b/docling/exceptions.py new file mode 100644 index 00000000..13145b9c --- /dev/null +++ b/docling/exceptions.py @@ -0,0 +1,6 @@ +class BaseError(RuntimeError): + pass + + +class ConversionError(BaseError): + pass diff --git a/tests/test_interfaces.py b/tests/test_interfaces.py index a6675846..23bc3345 100644 --- a/tests/test_interfaces.py +++ b/tests/test_interfaces.py @@ -10,7 +10,7 @@ from docling.document_converter import DocumentConverter, PdfFormatOption from .verify_utils import verify_conversion_result_v1, verify_conversion_result_v2 -GENERATE = True +GENERATE = False def get_pdf_path(): diff --git a/tests/test_invalid_input.py b/tests/test_invalid_input.py new file mode 100644 index 00000000..f40d79e4 --- /dev/null +++ b/tests/test_invalid_input.py @@ -0,0 +1,45 @@ +from io import BytesIO +from pathlib import Path + +import pytest + +from docling.datamodel.base_models import ConversionStatus, DocumentStream +from docling.document_converter import ConversionError, DocumentConverter + + +def get_pdf_path(): + + pdf_path = Path("./tests/data/2305.03393v1-pg9.pdf") + return pdf_path + + +@pytest.fixture +def converter(): + converter = DocumentConverter() + + return converter + + +def test_convert_unsupported_doc_format_wout_exception(converter: DocumentConverter): + result = converter.convert( + DocumentStream(name="input.xyz", stream=BytesIO(b"xyz")), raises_on_error=False + ) + assert result.status == ConversionStatus.SKIPPED + + +def test_convert_unsupported_doc_format_with_exception(converter: DocumentConverter): + with pytest.raises(ConversionError): + converter.convert( + DocumentStream(name="input.xyz", stream=BytesIO(b"xyz")), + raises_on_error=True, + ) + + +def test_convert_too_small_filesize_limit_wout_exception(converter: DocumentConverter): + result = converter.convert(get_pdf_path(), max_file_size=1, raises_on_error=False) + assert result.status == ConversionStatus.FAILURE + + +def test_convert_too_small_filesize_limit_with_exception(converter: DocumentConverter): + with pytest.raises(ConversionError): + converter.convert(get_pdf_path(), max_file_size=1, raises_on_error=True) From 9c788ae77891cd306a786b00ba5b0543b188bb3d Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" Date: Tue, 3 Dec 2024 15:16:47 +0000 Subject: [PATCH 35/40] chore: bump version to 2.8.3 [skip ci] --- CHANGELOG.md | 6 ++++++ pyproject.toml | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 77486960..2d2c0e25 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,9 @@ +## [v2.8.3](https://github.com/DS4SD/docling/releases/tag/v2.8.3) - 2024-12-03 + +### Fix + +* Improve handling of disallowed formats ([#429](https://github.com/DS4SD/docling/issues/429)) ([`34c7c79`](https://github.com/DS4SD/docling/commit/34c7c798580476a86ce8abec30b1115fbb36fdd8)) + ## [v2.8.2](https://github.com/DS4SD/docling/releases/tag/v2.8.2) - 2024-12-03 ### Fix diff --git a/pyproject.toml b/pyproject.toml index b6b832c8..e41e4236 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -1,6 +1,6 @@ [tool.poetry] name = "docling" -version = "2.8.2" # DO NOT EDIT, updated automatically +version = "2.8.3" # DO NOT EDIT, updated automatically description = "SDK and CLI for parsing PDF, DOCX, HTML, and more, to a unified document representation for powering downstream workflows such as gen AI applications." authors = ["Christoph Auer ", "Michele Dolfi ", "Maxim Lysak ", "Nikos Livathinos ", "Ahmed Nassar ", "Panos Vagenas ", "Peter Staar "] license = "MIT" From 8ada0bccc744df94f755adf71cf8b163e6304375 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Wed, 4 Dec 2024 14:22:00 +0100 Subject: [PATCH 36/40] fix: folder input in cli (#511) Signed-off-by: Michele Dolfi --- docling/cli/main.py | 41 +++++++++++++++++++++++++++++++---------- 1 file changed, 31 insertions(+), 10 deletions(-) diff --git a/docling/cli/main.py b/docling/cli/main.py index ec2c0777..87a93d15 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -11,6 +11,7 @@ from typing import Annotated, Dict, Iterable, List, Optional, Type import typer from docling_core.utils.file import resolve_source_to_path +from pydantic import TypeAdapter, ValidationError from docling.backend.docling_parse_backend import DoclingParseDocumentBackend from docling.backend.docling_parse_v2_backend import DoclingParseV2DocumentBackend @@ -260,19 +261,39 @@ def convert( with tempfile.TemporaryDirectory() as tempdir: input_doc_paths: List[Path] = [] for src in input_sources: - source = resolve_source_to_path(source=src, workdir=Path(tempdir)) - if not source.exists(): + try: + # check if we can fetch some remote url + source = resolve_source_to_path(source=src, workdir=Path(tempdir)) + input_doc_paths.append(source) + except FileNotFoundError: err_console.print( - f"[red]Error: The input file {source} does not exist.[/red]" + f"[red]Error: The input file {src} does not exist.[/red]" ) raise typer.Abort() - elif source.is_dir(): - for fmt in from_formats: - for ext in FormatToExtensions[fmt]: - input_doc_paths.extend(list(source.glob(f"**/*.{ext}"))) - input_doc_paths.extend(list(source.glob(f"**/*.{ext.upper()}"))) - else: - input_doc_paths.append(source) + except IsADirectoryError: + # if the input matches to a file or a folder + try: + local_path = TypeAdapter(Path).validate_python(src) + if local_path.exists() and local_path.is_dir(): + for fmt in from_formats: + for ext in FormatToExtensions[fmt]: + input_doc_paths.extend( + list(local_path.glob(f"**/*.{ext}")) + ) + input_doc_paths.extend( + list(local_path.glob(f"**/*.{ext.upper()}")) + ) + elif local_path.exists(): + input_doc_paths.append(local_path) + else: + err_console.print( + f"[red]Error: The input file {src} does not exist.[/red]" + ) + raise typer.Abort() + except Exception as err: + err_console.print(f"[red]Error: Cannot read the input {src}.[/red]") + _log.info(err) # will print more details if verbose is activated + raise typer.Abort() if to_formats is None: to_formats = [OutputFormat.MARKDOWN] From c830b92b2e043ea63d216f65b3f9d88d2a8c33f7 Mon Sep 17 00:00:00 2001 From: Michele Dolfi <97102151+dolfim-ibm@users.noreply.github.com> Date: Fri, 6 Dec 2024 09:33:39 +0100 Subject: [PATCH 37/40] fix: restore pydantic version pin after fixes (#512) * test: pin new docling-core changes and release pydantic pinning Signed-off-by: Michele Dolfi * pin docling-core release Signed-off-by: Michele Dolfi --------- Signed-off-by: Michele Dolfi --- poetry.lock | 430 +++++++++++++++++++++++++------------------------ pyproject.toml | 4 +- 2 files changed, 222 insertions(+), 212 deletions(-) diff --git a/poetry.lock b/poetry.lock index 184658ea..d2a3876d 100644 --- a/poetry.lock +++ b/poetry.lock @@ -890,13 +890,13 @@ files = [ [[package]] name = "docling-core" -version = "2.6.1" +version = "2.7.0" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.6.1-py3-none-any.whl", hash = "sha256:8e7a5bc0ce13289567738481949fed3ab580f2d8cea7525b246159233d81b26b"}, - {file = "docling_core-2.6.1.tar.gz", hash = "sha256:c8af45e0873611120cc24757d567d37e053a54e2ce060b7b5b44efd0d73f75e5"}, + {file = "docling_core-2.7.0-py3-none-any.whl", hash = "sha256:45cd51d7803587e779d49458399373eb399a599e52e2356bd358f63bd2559fa8"}, + {file = "docling_core-2.7.0.tar.gz", hash = "sha256:180a78cfd334b207f4984962f1f7a5d8e6f91734a9c7bd96d78bc9d19135f114"}, ] [package.dependencies] @@ -904,7 +904,7 @@ jsonref = ">=1.1.0,<2.0.0" jsonschema = ">=4.16.0,<5.0.0" pandas = ">=2.1.4,<3.0.0" pillow = ">=10.3.0,<11.0.0" -pydantic = ">=2.6.0,<2.10" +pydantic = ">=2.6.0,<2.10.0 || >2.10.0,<2.10.1 || >2.10.1,<2.10.2 || >2.10.2,<3.0.0" pyyaml = ">=5.1,<7.0.0" tabulate = ">=0.9.0,<0.10.0" typing-extensions = ">=4.12.2,<5.0.0" @@ -3765,10 +3765,10 @@ files = [ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] @@ -3791,10 +3791,10 @@ files = [ numpy = [ {version = ">=1.21.0", markers = "python_version == \"3.9\" and platform_system == \"Darwin\" and platform_machine == \"arm64\""}, {version = ">=1.19.3", markers = "platform_system == \"Linux\" and platform_machine == \"aarch64\" and python_version >= \"3.8\" and python_version < \"3.10\" or python_version > \"3.9\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_system != \"Darwin\" and python_version < \"3.10\" or python_version >= \"3.9\" and platform_machine != \"arm64\" and python_version < \"3.10\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.21.4", markers = "python_version >= \"3.10\" and platform_system == \"Darwin\" and python_version < \"3.11\""}, {version = ">=1.21.2", markers = "platform_system != \"Darwin\" and python_version >= \"3.10\" and python_version < \"3.11\""}, {version = ">=1.23.5", markers = "python_version >= \"3.11\" and python_version < \"3.12\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] [[package]] @@ -3975,8 +3975,8 @@ files = [ [package.dependencies] numpy = [ {version = ">=1.22.4", markers = "python_version < \"3.11\""}, - {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, {version = ">=1.23.2", markers = "python_version == \"3.11\""}, + {version = ">=1.26.0", markers = "python_version >= \"3.12\""}, ] python-dateutil = ">=2.8.2" pytz = ">=2020.1" @@ -4550,22 +4550,19 @@ files = [ [[package]] name = "pydantic" -version = "2.9.2" +version = "2.10.3" description = "Data validation using Python type hints" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic-2.9.2-py3-none-any.whl", hash = "sha256:f048cec7b26778210e28a0459867920654d48e5e62db0958433636cde4254f12"}, - {file = "pydantic-2.9.2.tar.gz", hash = "sha256:d155cef71265d1e9807ed1c32b4c8deec042a44a50a4188b25ac67ecd81a9c0f"}, + {file = "pydantic-2.10.3-py3-none-any.whl", hash = "sha256:be04d85bbc7b65651c5f8e6b9976ed9c6f41782a55524cef079a34a0bb82144d"}, + {file = "pydantic-2.10.3.tar.gz", hash = "sha256:cb5ac360ce894ceacd69c403187900a02c4b20b693a9dd1d643e1effab9eadf9"}, ] [package.dependencies] annotated-types = ">=0.6.0" -pydantic-core = "2.23.4" -typing-extensions = [ - {version = ">=4.6.1", markers = "python_version < \"3.13\""}, - {version = ">=4.12.2", markers = "python_version >= \"3.13\""}, -] +pydantic-core = "2.27.1" +typing-extensions = ">=4.12.2" [package.extras] email = ["email-validator (>=2.0.0)"] @@ -4573,100 +4570,111 @@ timezone = ["tzdata"] [[package]] name = "pydantic-core" -version = "2.23.4" +version = "2.27.1" description = "Core functionality for Pydantic validation and serialization" optional = false python-versions = ">=3.8" files = [ - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:b10bd51f823d891193d4717448fab065733958bdb6a6b351967bd349d48d5c9b"}, - {file = "pydantic_core-2.23.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:4fc714bdbfb534f94034efaa6eadd74e5b93c8fa6315565a222f7b6f42ca1166"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:63e46b3169866bd62849936de036f901a9356e36376079b05efa83caeaa02ceb"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ed1a53de42fbe34853ba90513cea21673481cd81ed1be739f7f2efb931b24916"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cfdd16ab5e59fc31b5e906d1a3f666571abc367598e3e02c83403acabc092e07"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:255a8ef062cbf6674450e668482456abac99a5583bbafb73f9ad469540a3a232"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4a7cd62e831afe623fbb7aabbb4fe583212115b3ef38a9f6b71869ba644624a2"}, - {file = "pydantic_core-2.23.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f09e2ff1f17c2b51f2bc76d1cc33da96298f0a036a137f5440ab3ec5360b624f"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e38e63e6f3d1cec5a27e0afe90a085af8b6806ee208b33030e65b6516353f1a3"}, - {file = "pydantic_core-2.23.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:0dbd8dbed2085ed23b5c04afa29d8fd2771674223135dc9bc937f3c09284d071"}, - {file = "pydantic_core-2.23.4-cp310-none-win32.whl", hash = "sha256:6531b7ca5f951d663c339002e91aaebda765ec7d61b7d1e3991051906ddde119"}, - {file = "pydantic_core-2.23.4-cp310-none-win_amd64.whl", hash = "sha256:7c9129eb40958b3d4500fa2467e6a83356b3b61bfff1b414c7361d9220f9ae8f"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:77733e3892bb0a7fa797826361ce8a9184d25c8dffaec60b7ffe928153680ba8"}, - {file = "pydantic_core-2.23.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:1b84d168f6c48fabd1f2027a3d1bdfe62f92cade1fb273a5d68e621da0e44e6d"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:df49e7a0861a8c36d089c1ed57d308623d60416dab2647a4a17fe050ba85de0e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ff02b6d461a6de369f07ec15e465a88895f3223eb75073ffea56b84d9331f607"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:996a38a83508c54c78a5f41456b0103c30508fed9abcad0a59b876d7398f25fd"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d97683ddee4723ae8c95d1eddac7c192e8c552da0c73a925a89fa8649bf13eea"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:216f9b2d7713eb98cb83c80b9c794de1f6b7e3145eef40400c62e86cee5f4e1e"}, - {file = "pydantic_core-2.23.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6f783e0ec4803c787bcea93e13e9932edab72068f68ecffdf86a99fd5918878b"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d0776dea117cf5272382634bd2a5c1b6eb16767c223c6a5317cd3e2a757c61a0"}, - {file = "pydantic_core-2.23.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d5f7a395a8cf1621939692dba2a6b6a830efa6b3cee787d82c7de1ad2930de64"}, - {file = "pydantic_core-2.23.4-cp311-none-win32.whl", hash = "sha256:74b9127ffea03643e998e0c5ad9bd3811d3dac8c676e47db17b0ee7c3c3bf35f"}, - {file = "pydantic_core-2.23.4-cp311-none-win_amd64.whl", hash = "sha256:98d134c954828488b153d88ba1f34e14259284f256180ce659e8d83e9c05eaa3"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:f3e0da4ebaef65158d4dfd7d3678aad692f7666877df0002b8a522cdf088f231"}, - {file = "pydantic_core-2.23.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:f69a8e0b033b747bb3e36a44e7732f0c99f7edd5cea723d45bc0d6e95377ffee"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:723314c1d51722ab28bfcd5240d858512ffd3116449c557a1336cbe3919beb87"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bb2802e667b7051a1bebbfe93684841cc9351004e2badbd6411bf357ab8d5ac8"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d18ca8148bebe1b0a382a27a8ee60350091a6ddaf475fa05ef50dc35b5df6327"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:33e3d65a85a2a4a0dc3b092b938a4062b1a05f3a9abde65ea93b233bca0e03f2"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:128585782e5bfa515c590ccee4b727fb76925dd04a98864182b22e89a4e6ed36"}, - {file = "pydantic_core-2.23.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:68665f4c17edcceecc112dfed5dbe6f92261fb9d6054b47d01bf6371a6196126"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:20152074317d9bed6b7a95ade3b7d6054845d70584216160860425f4fbd5ee9e"}, - {file = "pydantic_core-2.23.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9261d3ce84fa1d38ed649c3638feefeae23d32ba9182963e465d58d62203bd24"}, - {file = "pydantic_core-2.23.4-cp312-none-win32.whl", hash = "sha256:4ba762ed58e8d68657fc1281e9bb72e1c3e79cc5d464be146e260c541ec12d84"}, - {file = "pydantic_core-2.23.4-cp312-none-win_amd64.whl", hash = "sha256:97df63000f4fea395b2824da80e169731088656d1818a11b95f3b173747b6cd9"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:7530e201d10d7d14abce4fb54cfe5b94a0aefc87da539d0346a484ead376c3cc"}, - {file = "pydantic_core-2.23.4-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:df933278128ea1cd77772673c73954e53a1c95a4fdf41eef97c2b779271bd0bd"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cb3da3fd1b6a5d0279a01877713dbda118a2a4fc6f0d821a57da2e464793f05"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:42c6dcb030aefb668a2b7009c85b27f90e51e6a3b4d5c9bc4c57631292015b0d"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:696dd8d674d6ce621ab9d45b205df149399e4bb9aa34102c970b721554828510"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2971bb5ffe72cc0f555c13e19b23c85b654dd2a8f7ab493c262071377bfce9f6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8394d940e5d400d04cad4f75c0598665cbb81aecefaca82ca85bd28264af7f9b"}, - {file = "pydantic_core-2.23.4-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:0dff76e0602ca7d4cdaacc1ac4c005e0ce0dcfe095d5b5259163a80d3a10d327"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:7d32706badfe136888bdea71c0def994644e09fff0bfe47441deaed8e96fdbc6"}, - {file = "pydantic_core-2.23.4-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:ed541d70698978a20eb63d8c5d72f2cc6d7079d9d90f6b50bad07826f1320f5f"}, - {file = "pydantic_core-2.23.4-cp313-none-win32.whl", hash = "sha256:3d5639516376dce1940ea36edf408c554475369f5da2abd45d44621cb616f769"}, - {file = "pydantic_core-2.23.4-cp313-none-win_amd64.whl", hash = "sha256:5a1504ad17ba4210df3a045132a7baeeba5a200e930f57512ee02909fc5c4cb5"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:d4488a93b071c04dc20f5cecc3631fc78b9789dd72483ba15d423b5b3689b555"}, - {file = "pydantic_core-2.23.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:81965a16b675b35e1d09dd14df53f190f9129c0202356ed44ab2728b1c905658"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ffa2ebd4c8530079140dd2d7f794a9d9a73cbb8e9d59ffe24c63436efa8f271"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:61817945f2fe7d166e75fbfb28004034b48e44878177fc54d81688e7b85a3665"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:29d2c342c4bc01b88402d60189f3df065fb0dda3654744d5a165a5288a657368"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5e11661ce0fd30a6790e8bcdf263b9ec5988e95e63cf901972107efc49218b13"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9d18368b137c6295db49ce7218b1a9ba15c5bc254c96d7c9f9e924a9bc7825ad"}, - {file = "pydantic_core-2.23.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ec4e55f79b1c4ffb2eecd8a0cfba9955a2588497d96851f4c8f99aa4a1d39b12"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:374a5e5049eda9e0a44c696c7ade3ff355f06b1fe0bb945ea3cac2bc336478a2"}, - {file = "pydantic_core-2.23.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:5c364564d17da23db1106787675fc7af45f2f7b58b4173bfdd105564e132e6fb"}, - {file = "pydantic_core-2.23.4-cp38-none-win32.whl", hash = "sha256:d7a80d21d613eec45e3d41eb22f8f94ddc758a6c4720842dc74c0581f54993d6"}, - {file = "pydantic_core-2.23.4-cp38-none-win_amd64.whl", hash = "sha256:5f5ff8d839f4566a474a969508fe1c5e59c31c80d9e140566f9a37bba7b8d556"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:a4fa4fc04dff799089689f4fd502ce7d59de529fc2f40a2c8836886c03e0175a"}, - {file = "pydantic_core-2.23.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:0a7df63886be5e270da67e0966cf4afbae86069501d35c8c1b3b6c168f42cb36"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dcedcd19a557e182628afa1d553c3895a9f825b936415d0dbd3cd0bbcfd29b4b"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f54b118ce5de9ac21c363d9b3caa6c800341e8c47a508787e5868c6b79c9323"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:86d2f57d3e1379a9525c5ab067b27dbb8a0642fb5d454e17a9ac434f9ce523e3"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:de6d1d1b9e5101508cb37ab0d972357cac5235f5c6533d1071964c47139257df"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1278e0d324f6908e872730c9102b0112477a7f7cf88b308e4fc36ce1bdb6d58c"}, - {file = "pydantic_core-2.23.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:9a6b5099eeec78827553827f4c6b8615978bb4b6a88e5d9b93eddf8bb6790f55"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e55541f756f9b3ee346b840103f32779c695a19826a4c442b7954550a0972040"}, - {file = "pydantic_core-2.23.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:a5c7ba8ffb6d6f8f2ab08743be203654bb1aaa8c9dcb09f82ddd34eadb695605"}, - {file = "pydantic_core-2.23.4-cp39-none-win32.whl", hash = "sha256:37b0fe330e4a58d3c58b24d91d1eb102aeec675a3db4c292ec3928ecd892a9a6"}, - {file = "pydantic_core-2.23.4-cp39-none-win_amd64.whl", hash = "sha256:1498bec4c05c9c787bde9125cfdcc63a41004ff167f495063191b863399b1a29"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f455ee30a9d61d3e1a15abd5068827773d6e4dc513e795f380cdd59932c782d5"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:1e90d2e3bd2c3863d48525d297cd143fe541be8bbf6f579504b9712cb6b643ec"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2e203fdf807ac7e12ab59ca2bfcabb38c7cf0b33c41efeb00f8e5da1d86af480"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e08277a400de01bc72436a0ccd02bdf596631411f592ad985dcee21445bd0068"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f220b0eea5965dec25480b6333c788fb72ce5f9129e8759ef876a1d805d00801"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:d06b0c8da4f16d1d1e352134427cb194a0a6e19ad5db9161bf32b2113409e728"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:ba1a0996f6c2773bd83e63f18914c1de3c9dd26d55f4ac302a7efe93fb8e7433"}, - {file = "pydantic_core-2.23.4-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:9a5bce9d23aac8f0cf0836ecfc033896aa8443b501c58d0602dbfd5bd5b37753"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:78ddaaa81421a29574a682b3179d4cf9e6d405a09b99d93ddcf7e5239c742e21"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:883a91b5dd7d26492ff2f04f40fbb652de40fcc0afe07e8129e8ae779c2110eb"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:88ad334a15b32a791ea935af224b9de1bf99bcd62fabf745d5f3442199d86d59"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:233710f069d251feb12a56da21e14cca67994eab08362207785cf8c598e74577"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:19442362866a753485ba5e4be408964644dd6a09123d9416c54cd49171f50744"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:624e278a7d29b6445e4e813af92af37820fafb6dcc55c012c834f9e26f9aaaef"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f5ef8f42bec47f21d07668a043f077d507e5bf4e668d5c6dfe6aaba89de1a5b8"}, - {file = "pydantic_core-2.23.4-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:aea443fffa9fbe3af1a9ba721a87f926fe548d32cab71d188a6ede77d0ff244e"}, - {file = "pydantic_core-2.23.4.tar.gz", hash = "sha256:2584f7cf844ac4d970fba483a717dbe10c1c1c96a969bf65d61ffe94df1b2863"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:71a5e35c75c021aaf400ac048dacc855f000bdfed91614b4a726f7432f1f3d6a"}, + {file = "pydantic_core-2.27.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f82d068a2d6ecfc6e054726080af69a6764a10015467d7d7b9f66d6ed5afa23b"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:121ceb0e822f79163dd4699e4c54f5ad38b157084d97b34de8b232bcaad70278"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4603137322c18eaf2e06a4495f426aa8d8388940f3c457e7548145011bb68e05"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a33cd6ad9017bbeaa9ed78a2e0752c5e250eafb9534f308e7a5f7849b0b1bfb4"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:15cc53a3179ba0fcefe1e3ae50beb2784dede4003ad2dfd24f81bba4b23a454f"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45d9c5eb9273aa50999ad6adc6be5e0ecea7e09dbd0d31bd0c65a55a2592ca08"}, + {file = "pydantic_core-2.27.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8bf7b66ce12a2ac52d16f776b31d16d91033150266eb796967a7e4621707e4f6"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:655d7dd86f26cb15ce8a431036f66ce0318648f8853d709b4167786ec2fa4807"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_armv7l.whl", hash = "sha256:5556470f1a2157031e676f776c2bc20acd34c1990ca5f7e56f1ebf938b9ab57c"}, + {file = "pydantic_core-2.27.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f69ed81ab24d5a3bd93861c8c4436f54afdf8e8cc421562b0c7504cf3be58206"}, + {file = "pydantic_core-2.27.1-cp310-none-win32.whl", hash = "sha256:f5a823165e6d04ccea61a9f0576f345f8ce40ed533013580e087bd4d7442b52c"}, + {file = "pydantic_core-2.27.1-cp310-none-win_amd64.whl", hash = "sha256:57866a76e0b3823e0b56692d1a0bf722bffb324839bb5b7226a7dbd6c9a40b17"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:ac3b20653bdbe160febbea8aa6c079d3df19310d50ac314911ed8cc4eb7f8cb8"}, + {file = "pydantic_core-2.27.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:a5a8e19d7c707c4cadb8c18f5f60c843052ae83c20fa7d44f41594c644a1d330"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7f7059ca8d64fea7f238994c97d91f75965216bcbe5f695bb44f354893f11d52"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bed0f8a0eeea9fb72937ba118f9db0cb7e90773462af7962d382445f3005e5a4"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a3cb37038123447cf0f3ea4c74751f6a9d7afef0eb71aa07bf5f652b5e6a132c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:84286494f6c5d05243456e04223d5a9417d7f443c3b76065e75001beb26f88de"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:acc07b2cfc5b835444b44a9956846b578d27beeacd4b52e45489e93276241025"}, + {file = "pydantic_core-2.27.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fefee876e07a6e9aad7a8c8c9f85b0cdbe7df52b8a9552307b09050f7512c7e"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:258c57abf1188926c774a4c94dd29237e77eda19462e5bb901d88adcab6af919"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_armv7l.whl", hash = "sha256:35c14ac45fcfdf7167ca76cc80b2001205a8d5d16d80524e13508371fb8cdd9c"}, + {file = "pydantic_core-2.27.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:d1b26e1dff225c31897696cab7d4f0a315d4c0d9e8666dbffdb28216f3b17fdc"}, + {file = "pydantic_core-2.27.1-cp311-none-win32.whl", hash = "sha256:2cdf7d86886bc6982354862204ae3b2f7f96f21a3eb0ba5ca0ac42c7b38598b9"}, + {file = "pydantic_core-2.27.1-cp311-none-win_amd64.whl", hash = "sha256:3af385b0cee8df3746c3f406f38bcbfdc9041b5c2d5ce3e5fc6637256e60bbc5"}, + {file = "pydantic_core-2.27.1-cp311-none-win_arm64.whl", hash = "sha256:81f2ec23ddc1b476ff96563f2e8d723830b06dceae348ce02914a37cb4e74b89"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:9cbd94fc661d2bab2bc702cddd2d3370bbdcc4cd0f8f57488a81bcce90c7a54f"}, + {file = "pydantic_core-2.27.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:5f8c4718cd44ec1580e180cb739713ecda2bdee1341084c1467802a417fe0f02"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15aae984e46de8d376df515f00450d1522077254ef6b7ce189b38ecee7c9677c"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1ba5e3963344ff25fc8c40da90f44b0afca8cfd89d12964feb79ac1411a260ac"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:992cea5f4f3b29d6b4f7f1726ed8ee46c8331c6b4eed6db5b40134c6fe1768bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:0325336f348dbee6550d129b1627cb8f5351a9dc91aad141ffb96d4937bd9529"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7597c07fbd11515f654d6ece3d0e4e5093edc30a436c63142d9a4b8e22f19c35"}, + {file = "pydantic_core-2.27.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:3bbd5d8cc692616d5ef6fbbbd50dbec142c7e6ad9beb66b78a96e9c16729b089"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:dc61505e73298a84a2f317255fcc72b710b72980f3a1f670447a21efc88f8381"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_armv7l.whl", hash = "sha256:e1f735dc43da318cad19b4173dd1ffce1d84aafd6c9b782b3abc04a0d5a6f5bb"}, + {file = "pydantic_core-2.27.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:f4e5658dbffe8843a0f12366a4c2d1c316dbe09bb4dfbdc9d2d9cd6031de8aae"}, + {file = "pydantic_core-2.27.1-cp312-none-win32.whl", hash = "sha256:672ebbe820bb37988c4d136eca2652ee114992d5d41c7e4858cdd90ea94ffe5c"}, + {file = "pydantic_core-2.27.1-cp312-none-win_amd64.whl", hash = "sha256:66ff044fd0bb1768688aecbe28b6190f6e799349221fb0de0e6f4048eca14c16"}, + {file = "pydantic_core-2.27.1-cp312-none-win_arm64.whl", hash = "sha256:9a3b0793b1bbfd4146304e23d90045f2a9b5fd5823aa682665fbdaf2a6c28f3e"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:f216dbce0e60e4d03e0c4353c7023b202d95cbaeff12e5fd2e82ea0a66905073"}, + {file = "pydantic_core-2.27.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a2e02889071850bbfd36b56fd6bc98945e23670773bc7a76657e90e6b6603c08"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42b0e23f119b2b456d07ca91b307ae167cc3f6c846a7b169fca5326e32fdc6cf"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:764be71193f87d460a03f1f7385a82e226639732214b402f9aa61f0d025f0737"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1c00666a3bd2f84920a4e94434f5974d7bbc57e461318d6bb34ce9cdbbc1f6b2"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3ccaa88b24eebc0f849ce0a4d09e8a408ec5a94afff395eb69baf868f5183107"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c65af9088ac534313e1963443d0ec360bb2b9cba6c2909478d22c2e363d98a51"}, + {file = "pydantic_core-2.27.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:206b5cf6f0c513baffaeae7bd817717140770c74528f3e4c3e1cec7871ddd61a"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:062f60e512fc7fff8b8a9d680ff0ddaaef0193dba9fa83e679c0c5f5fbd018bc"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_armv7l.whl", hash = "sha256:a0697803ed7d4af5e4c1adf1670af078f8fcab7a86350e969f454daf598c4960"}, + {file = "pydantic_core-2.27.1-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:58ca98a950171f3151c603aeea9303ef6c235f692fe555e883591103da709b23"}, + {file = "pydantic_core-2.27.1-cp313-none-win32.whl", hash = "sha256:8065914ff79f7eab1599bd80406681f0ad08f8e47c880f17b416c9f8f7a26d05"}, + {file = "pydantic_core-2.27.1-cp313-none-win_amd64.whl", hash = "sha256:ba630d5e3db74c79300d9a5bdaaf6200172b107f263c98a0539eeecb857b2337"}, + {file = "pydantic_core-2.27.1-cp313-none-win_arm64.whl", hash = "sha256:45cf8588c066860b623cd11c4ba687f8d7175d5f7ef65f7129df8a394c502de5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:5897bec80a09b4084aee23f9b73a9477a46c3304ad1d2d07acca19723fb1de62"}, + {file = "pydantic_core-2.27.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:d0165ab2914379bd56908c02294ed8405c252250668ebcb438a55494c69f44ab"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b9af86e1d8e4cfc82c2022bfaa6f459381a50b94a29e95dcdda8442d6d83864"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f6c8a66741c5f5447e047ab0ba7a1c61d1e95580d64bce852e3df1f895c4067"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9a42d6a8156ff78981f8aa56eb6394114e0dedb217cf8b729f438f643608cbcd"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:64c65f40b4cd8b0e049a8edde07e38b476da7e3aaebe63287c899d2cff253fa5"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9fdcf339322a3fae5cbd504edcefddd5a50d9ee00d968696846f089b4432cf78"}, + {file = "pydantic_core-2.27.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:bf99c8404f008750c846cb4ac4667b798a9f7de673ff719d705d9b2d6de49c5f"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8f1edcea27918d748c7e5e4d917297b2a0ab80cad10f86631e488b7cddf76a36"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_armv7l.whl", hash = "sha256:159cac0a3d096f79ab6a44d77a961917219707e2a130739c64d4dd46281f5c2a"}, + {file = "pydantic_core-2.27.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:029d9757eb621cc6e1848fa0b0310310de7301057f623985698ed7ebb014391b"}, + {file = "pydantic_core-2.27.1-cp38-none-win32.whl", hash = "sha256:a28af0695a45f7060e6f9b7092558a928a28553366519f64083c63a44f70e618"}, + {file = "pydantic_core-2.27.1-cp38-none-win_amd64.whl", hash = "sha256:2d4567c850905d5eaaed2f7a404e61012a51caf288292e016360aa2b96ff38d4"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:e9386266798d64eeb19dd3677051f5705bf873e98e15897ddb7d76f477131967"}, + {file = "pydantic_core-2.27.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4228b5b646caa73f119b1ae756216b59cc6e2267201c27d3912b592c5e323b60"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0b3dfe500de26c52abe0477dde16192ac39c98f05bf2d80e76102d394bd13854"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:aee66be87825cdf72ac64cb03ad4c15ffef4143dbf5c113f64a5ff4f81477bf9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3b748c44bb9f53031c8cbc99a8a061bc181c1000c60a30f55393b6e9c45cc5bd"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ca038c7f6a0afd0b2448941b6ef9d5e1949e999f9e5517692eb6da58e9d44be"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e0bd57539da59a3e4671b90a502da9a28c72322a4f17866ba3ac63a82c4498e"}, + {file = "pydantic_core-2.27.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ac6c2c45c847bbf8f91930d88716a0fb924b51e0c6dad329b793d670ec5db792"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b94d4ba43739bbe8b0ce4262bcc3b7b9f31459ad120fb595627eaeb7f9b9ca01"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_armv7l.whl", hash = "sha256:00e6424f4b26fe82d44577b4c842d7df97c20be6439e8e685d0d715feceb9fb9"}, + {file = "pydantic_core-2.27.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:38de0a70160dd97540335b7ad3a74571b24f1dc3ed33f815f0880682e6880131"}, + {file = "pydantic_core-2.27.1-cp39-none-win32.whl", hash = "sha256:7ccebf51efc61634f6c2344da73e366c75e735960b5654b63d7e6f69a5885fa3"}, + {file = "pydantic_core-2.27.1-cp39-none-win_amd64.whl", hash = "sha256:a57847b090d7892f123726202b7daa20df6694cbd583b67a592e856bff603d6c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3fa80ac2bd5856580e242dbc202db873c60a01b20309c8319b5c5986fbe53ce6"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d950caa237bb1954f1b8c9227b5065ba6875ac9771bb8ec790d956a699b78676"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e4216e64d203e39c62df627aa882f02a2438d18a5f21d7f721621f7a5d3611d"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02a3d637bd387c41d46b002f0e49c52642281edacd2740e5a42f7017feea3f2c"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:161c27ccce13b6b0c8689418da3885d3220ed2eae2ea5e9b2f7f3d48f1d52c27"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:19910754e4cc9c63bc1c7f6d73aa1cfee82f42007e407c0f413695c2f7ed777f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:e173486019cc283dc9778315fa29a363579372fe67045e971e89b6365cc035ed"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:af52d26579b308921b73b956153066481f064875140ccd1dfd4e77db89dbb12f"}, + {file = "pydantic_core-2.27.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:981fb88516bd1ae8b0cbbd2034678a39dedc98752f264ac9bc5839d3923fa04c"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:5fde892e6c697ce3e30c61b239330fc5d569a71fefd4eb6512fc6caec9dd9e2f"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:816f5aa087094099fff7edabb5e01cc370eb21aa1a1d44fe2d2aefdfb5599b31"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9c10c309e18e443ddb108f0ef64e8729363adbfd92d6d57beec680f6261556f3"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98476c98b02c8e9b2eec76ac4156fd006628b1b2d0ef27e548ffa978393fd154"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c3027001c28434e7ca5a6e1e527487051136aa81803ac812be51802150d880dd"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:7699b1df36a48169cdebda7ab5a2bac265204003f153b4bd17276153d997670a"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_armv7l.whl", hash = "sha256:1c39b07d90be6b48968ddc8c19e7585052088fd7ec8d568bb31ff64c70ae3c97"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:46ccfe3032b3915586e469d4972973f893c0a2bb65669194a5bdea9bacc088c2"}, + {file = "pydantic_core-2.27.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:62ba45e21cf6571d7f716d903b5b7b6d2617e2d5d67c0923dc47b9d41369f840"}, + {file = "pydantic_core-2.27.1.tar.gz", hash = "sha256:62a763352879b84aa31058fc931884055fd75089cccbd9d58bb6afd01141b235"}, ] [package.dependencies] @@ -5474,12 +5482,12 @@ cffi = {version = "*", markers = "implementation_name == \"pypy\""} [[package]] name = "rapidocr-onnxruntime" -version = "1.4.0" +version = "1.4.1" description = "A cross platform OCR Library based on OnnxRuntime." optional = true python-versions = "<3.13,>=3.6" files = [ - {file = "rapidocr_onnxruntime-1.4.0-py3-none-any.whl", hash = "sha256:d21c4ba2ef80b7a8ecf8178632f273398a92ab44a1ffb9e171139ef2a589d690"}, + {file = "rapidocr_onnxruntime-1.4.1-py3-none-any.whl", hash = "sha256:5ecdb8f4f3beec56630197f87c3e67ab744fce0cc66394b7b1da08c8c96a727f"}, ] [package.dependencies] @@ -5700,112 +5708,114 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.22.0" +version = "0.22.1" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.22.0-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:a4366f264fa60d3c109f0b27af0cd9eb8d46746bd70bd3d9d425f035b6c7e286"}, - {file = "rpds_py-0.22.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e34a3e665d38d0749072e6565400c8ce9abae976e338919a0dfbfb0e1ba43068"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:38cacf1f378571450576f2c8ce87da6f3fddc59d744de5c12b37acc23285b1e1"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8cbb040fec8eddd5a6a75e737fd73c9ce37e51f94bacdd0b178d0174a4758395"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d80fd710b3307a3c63809048b72c536689b9b0b31a2518339c3f1a4d29c73d7a"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4b5d17d8f5b885ce50e0cda85f99c0719e365e98b587338535fa566a48375afb"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3f7a048ec1ebc991331d709be4884dc318c9eaafa66dcde8be0933ac0e702149"}, - {file = "rpds_py-0.22.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:306da3dfa174b489a3fc63b0872e2226a5ddf94c59875a770d72aff945d5ed96"}, - {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:c7b4450093c0c909299770226fb0285be47b0a57545bae25b5c4e51566b0e587"}, - {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:0903ffdb5b9007e503203b6285e4ff0faf96d875c19f1d103b475acf7d9f7311"}, - {file = "rpds_py-0.22.0-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:d1522025cda9e57329aade769f56e5793b2a5da7759a21914ee10e67e17e601e"}, - {file = "rpds_py-0.22.0-cp310-cp310-win32.whl", hash = "sha256:49e084d47a66027ac72844f9f52f13d347a9a1f05d4f84381b420e47f836a7fd"}, - {file = "rpds_py-0.22.0-cp310-cp310-win_amd64.whl", hash = "sha256:d9ceca96df54cb1675a0b7f52f1c6d5d1df62c5b40741ba211780f1b05a282a2"}, - {file = "rpds_py-0.22.0-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:771c9a3851beaa617d8c8115d65f834a2b52490f42ee2b88b13f1fc5529e9e0c"}, - {file = "rpds_py-0.22.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:341a07a4b55126bfae68c9bf24220a73d456111e5eb3dcbdab9fd16de2341224"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f7649c8b8e4bd1ccc5fcbd51a855d57a617deeba19c66e3d04b1abecc61036b2"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:2f513758e7cda8bc262e80299a8e3395d7ef7f4ae705be62632f229bc6c33208"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba1fc34d0b2f6fd53377a4c954116251eba6d076bf64f903311f4a7d27d10acd"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:632d2fdddd9fbe3ac8896a119fd18a71fc95ca9c4cbe5223096c142d8c4a2b1d"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:326e42f2b49462e05f8527a1311ce98f9f97c484b3e443ec0ea4638bed3aebcf"}, - {file = "rpds_py-0.22.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e9bbdba9e75b1a9ee1dd1335034dad998ef1acc08492226c6fd50aa773bdfa7d"}, - {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:41f65a97bf2c4b161c9f8f89bc37058346bec9b36e373c8ad00a16c957bff625"}, - {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:0686f2c16eafdc2c6b4ce6e86e5b3092e87db09ae64be2787616444eb35b9756"}, - {file = "rpds_py-0.22.0-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:4e7c9aa2353eb0b0d845323857197daa036c2ff8624df990b0d886d22a8f665e"}, - {file = "rpds_py-0.22.0-cp311-cp311-win32.whl", hash = "sha256:2d2fc3ab021be3e0b5aec6d4164f2689d231b8bfc5185cc454314746aa4aee72"}, - {file = "rpds_py-0.22.0-cp311-cp311-win_amd64.whl", hash = "sha256:87453d491369cd8018016d2714a13e8461975161703c18ee31eecf087a8ae5d4"}, - {file = "rpds_py-0.22.0-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:e9d4293b21c69ee4f9e1a99ac4f772951d345611c614a0cfae2ec6b565279bc9"}, - {file = "rpds_py-0.22.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:67e013a17a3db4d98cc228fd5aeb36a51b0f5cf7330b9102a552060f1fe4e560"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b639a19e1791b646d27f15d17530a51722cc728d43b2dff3aeb904f92d91bac"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1357c3092702078b7782b6ebd5ba9b22c1a291c34fbf9d8f1a48237466ac7758"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:842855bbb113a19c393c6de5aa6ed9a26c6b13c2fead5e49114d39f0d08b94d8"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5ae7927cd2b869ca4dc645169d8af5494a29c99afd0ea0f24dd00c811ab1d8b8"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b91bfef5daa2a5a4fe62f8d317fc91a626073639f951f851bd2cb252d01bc6c5"}, - {file = "rpds_py-0.22.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:4fc4824e38c1e91a73bc820e7caacaf19d0acd557465aceef0420ca59489b390"}, - {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:92d28a608127b357da47c99e0d0e0655ca2060286540fe9f2a25a2e8ac666e05"}, - {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:c637188b930175c256f13adbfc427b83ec7e64476d1ec9d6608f312bb84e06c3"}, - {file = "rpds_py-0.22.0-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:93bbd66f46dddc41e8c656130c97c0fb515e0fa44e1eebb2592769dbbd41b2f5"}, - {file = "rpds_py-0.22.0-cp312-cp312-win32.whl", hash = "sha256:54d8f94dec5765a9edc19610fecf0fdf9cab36cbb9def1213188215f735a6f98"}, - {file = "rpds_py-0.22.0-cp312-cp312-win_amd64.whl", hash = "sha256:931bf3d0705b2834fed29354f35170fa022fe22a95542b61b7c66aca5f8a224f"}, - {file = "rpds_py-0.22.0-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:2a57300cc8b034c5707085249efd09f19116bb80278d0ec925d7f3710165c510"}, - {file = "rpds_py-0.22.0-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:c398a5a8e258dfdc5ea2aa4e5aa2ca3207f654a8eb268693dd1a76939074a588"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a6cc4eb1e86364331928acafb2bb41d8ab735ca3caf2d6019b9f6dac3f4f65d"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:574c5c94213bc9990805bfd7e4ba3826d3c098516cbc19f0d0ef0433ad93fa06"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4c0321bc03a1c513eca1837e3bba948b975bcf3a172aebc197ab3573207f137a"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d276280649305c1da6cdd84585d48ae1f0efa67434d8b10d2df95228e59a05bb"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c17b43fe9c6da16885e3fe28922bcd1a029e61631fb771c7d501019b40bcc904"}, - {file = "rpds_py-0.22.0-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:48c95997af9314f4034fe5ba2d837399e786586e220835a578d28fe8161e6ae5"}, - {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:e9aa4af6b879bb75a3c7766fbf49d77f4097dd12b548ecbbd8b3f85caa833281"}, - {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:8426f97117b914b9bfb2a7bd46edc148e8defda728a55a5df3a564abe70cd7a4"}, - {file = "rpds_py-0.22.0-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:034964ea0ea09645bdde13038b38abb14be0aa747f20fcfab6181207dd9e0483"}, - {file = "rpds_py-0.22.0-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:3dc7c64b56b82428894f056e9ff6e8ee917ff74fc26b65211a33602c2372e928"}, - {file = "rpds_py-0.22.0-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:1212cb231f2002934cd8d71a0d718fdd9d9a2dd671e0feef8501038df3508026"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5f21e1278c9456cd601832375c778ca44614d3433996488221a56572c223f04a"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:875fe8dffb43c20f68379ee098b035a7038d7903c795d46715f66575a7050b19"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e23dcdd4b2ff9c6b3317ea7921b210d39592f8ca1cdea58ada25b202c65c0a69"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f0fb8efc9e579acf1e556fd86277fecec320c21ca9b5d39db96433ad8c45bc4a"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe23687924b25a2dee52fab15976fd6577ed8518072bcda9ff2e2b88ab1f168b"}, - {file = "rpds_py-0.22.0-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d5469b347445d1c31105f33e7bfc9a8ba213d48e42641a610dda65bf9e3c83f5"}, - {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:a810a57ce5e8ecf8eac6ec4dab534ff80c34e5a2c31db60e992009cd20f58e0f"}, - {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:d9bb9242b38a664f307b3b897f093896f7ed51ef4fe25a0502e5a368de9151ea"}, - {file = "rpds_py-0.22.0-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:b4660943030406aaa40ec9f51960dd88049903d9536bc3c8ebb5cc4e1f119bbe"}, - {file = "rpds_py-0.22.0-cp313-cp313t-win32.whl", hash = "sha256:208ce1d8e3af138d1d9b21d7206356b7f29b96675e0113aea652cf024e4ddfdc"}, - {file = "rpds_py-0.22.0-cp313-cp313t-win_amd64.whl", hash = "sha256:e6da2e0500742e0f157f005924a0589f2e2dcbfdd6cd0cc0abce367433e989be"}, - {file = "rpds_py-0.22.0-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:f980a0640599a74f27fd9d50c84c293f1cb7afc2046c5c6d3efaf8ec7cdbc326"}, - {file = "rpds_py-0.22.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ca505fd3767a09a139737f3278bc8a485cb64043062da89bcba27e2f2ea78d33"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ba235e00e0878ba1080b0f2a761f143b2a2d1c354f3d8e507fbf2f3de401bf18"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:81e7a27365b02fe70a77f1365376879917235b3fec551d19b4c91b51d0bc1d07"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:32a0e24cab2daae0503b06666d516e90a080c1a95aff0406b9f03c6489177c4b"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a73ed43d64209e853bba567a543170267a5cd64f359540b0ca2d597e329ba172"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0abcce5e874474d3eab5ad53be03dae2abe651d248bdeaabe83708e82969e78"}, - {file = "rpds_py-0.22.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f4e9946c8c7def17e4fcb5eddb14c4eb6ebc7f6f309075e6c8d23b133c104607"}, - {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:758098b38c344d9a7f279baf0689261777e601f620078ef5afdc9bd3339965c3"}, - {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:9ad4640a409bc2b7d22b7921e7660f0db96c5c8c69fbb2e8f3261d4f71d33983"}, - {file = "rpds_py-0.22.0-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:8c48fc7458fe3a74dcdf56ba3534ff41bd421f69436df09ff3497fdaac18b431"}, - {file = "rpds_py-0.22.0-cp39-cp39-win32.whl", hash = "sha256:fde778947304e55fc732bc8ea5c6063e74244ac1808471cb498983a210aaf62c"}, - {file = "rpds_py-0.22.0-cp39-cp39-win_amd64.whl", hash = "sha256:5fdf91a7c07f40e47b193f2acae0ed9da35d09325d7c3c3279f722b7cbf3d264"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c8fd7a16f7a047e06c747cfcf2acef3ac316132df1c6077445b29ee6f3f3a70b"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:6b6e4bcfc32f831bfe3d6d8a5acedfbfd5e252a03c83fa24813b277a3a8a13ca"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:eadd2417e83a77ce3ae4a0efd08cb0ebdfd317b6406d11020354a53ad458ec84"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:f9dc2113e0cf0dd637751ca736186fca63664939ceb9f9f67e93ade88c69c0c9"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:dc2c00acdf68f1f69a476b770af311a7dc3955b7de228b04a40bcc51ac4d743b"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dfdabdf8519c93908b2bf0f87c3f86f9e88bab279fb4acfd0907519ca5a1739f"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8338db3c76833d02dc21c3e2c42534091341d26e4f7ba32c6032bb558a02e07b"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8ad4dfda52e64af3202ceb2143a62deba97894b71c64a4405ee80f6b3ea77285"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:3b94b074dcce39976db22ea75c7aea8b22d95e6d3b62f76e20e1179a278521d8"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:d4f2af3107fe4dc40c0d1a2409863f5249c6796398a1d83c1d99a0b3fa6cfb8d"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:bb11809b0de643a292a82f728c494a2bbef0e30a7c42d37464abbd6bef7ca7b1"}, - {file = "rpds_py-0.22.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:c1c21030ed494deb10226f90e2dbd84a012d59810c409832714a3dd576527be2"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:64a0c965a1e299c9b280006bdb15c276c427c45360aed676305dc36bcaa4d13c"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:2498ff422823be087b48bc82710deb87ac34f6b7c8034ee39920647647de1e60"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59e63da174ff287db05ef7c21d75974a5bac727ed60452aeb3a14278477842a8"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e1c04fb380bc8efaae2fdf17ed6cd5d223da78a8b0b18a610f53d4c5d6e31dfd"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e04919ffa9a728c446b27b6b625fa1d00ece221bdb9d633e978a7e0353a12c0e"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:24c28df05bd284879d0fac850ba697077d2a33b7ebcaea6318d6b6cdfdc86ddc"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d33622dc63c295788eed09dbb1d11bed178909d3267b02d873116ee6be368244"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:7539dbb8f705e13629ba6f23388976aad809e387f32a6e5c0712e4e8d9bfcce7"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:b8906f537978da3f7f0bd1ba37b69f6a877bb43312023b086582707d2835bf2f"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:62ab12fe03ffc49978d29de9c31bbb216610157f7e5ca8e172fed6642aead3be"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:762206ba3bf1d6c8c9e0055871d3c0d5b074b7c3120193e6c067e7866f106ab1"}, - {file = "rpds_py-0.22.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:ed0102146574e5e9f079b2e1a06e6b5b12a691f9c74a65b93b7f3d4feda566c6"}, - {file = "rpds_py-0.22.0.tar.gz", hash = "sha256:32de71c393f126d8203e9815557c7ff4d72ed1ad3aa3f52f6c7938413176750a"}, + {file = "rpds_py-0.22.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ab27dd4edd84b13309f268ffcdfc07aef8339135ffab7b6d43f16884307a2a48"}, + {file = "rpds_py-0.22.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9d5b925156a746dc1f5f52376fdd1fbdd3f6ffe1fcd6f5e06f77ca79abb940a3"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201650b309c419143775c15209c620627de3c09a27c7fb58375325aec5cce260"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31264187fc934ff1024a4f56775f33c9252d3f4f3e27ec07d1995a26b52702c3"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c5ffe47ccf92d8b17e10f8a5ce28d015aa1196edc3359684cf31504eae6a14"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9ac7280bd045f472b50306d7efeee051b69e3a2dd1b90f46bd7e86e63b1efa2"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f941fb86195f97be7f6efe04a21b223f05dfe4d1dfb159999e2f8d101e44cc4"}, + {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f91bfc39f7a64168e08ab831fa497ec5438c1d6c6e2f9e12848d95ad11ac8523"}, + {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:effcae2152afe7937a28376dbabb25c770ef99ed4e16a4ffeb8e6a4f7c4f06aa"}, + {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2177e59c033bf0d1bf7de1ced561205963583caf3242c6c700a723034bfb5f8e"}, + {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:66f4f48a89cdd30ab3a47335df81c76e9a63799d0d84b29c0618371c66fa37b0"}, + {file = "rpds_py-0.22.1-cp310-cp310-win32.whl", hash = "sha256:b07fa9e634234e84096adfa4be3828c8f26e238679c122824b2b3d7131bec578"}, + {file = "rpds_py-0.22.1-cp310-cp310-win_amd64.whl", hash = "sha256:ca4657e9fd0b1b5376942d403d634ce188f79064f0873aa853ab05b10185ceec"}, + {file = "rpds_py-0.22.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:608c84699b2db09c6a8743845b1a3dad36fae53eaaecb241d45b13dff74405fb"}, + {file = "rpds_py-0.22.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dae4eb9b5534e09ba6c6ab496a757e5e394b7e7b08767d25ca37e8d36491114"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09a1f000c5f6e08b298275bae00921e9fbbf2a35dae0a86db2821c058c2201a9"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:580ccbf11f02f948add4cb641843030a89f1463d7c0740cbfc9aca91e9dc34b3"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96559e05bdf938b2048353e10a7920b98f853cefe4482c2064a718d7d0a50bd7"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128cbaed7ba26116820bcb992405d6a13ea18c8fca1b8c4f59906d858e91e979"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734783dd7da58f76222f458346ddebdb3621686a1a2a667db5049caf0c9956b9"}, + {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9ce6b83597d45bec44a2690857ede62fc98223772135f8a7fa90884eb726501"}, + {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bca4428c4a957b78ded3e6e62884ab03f029dce8fa8d34818da0f80f61332b49"}, + {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ded65691a1d3fd7d2aa89d2c91aa51f941601bb2ce099739909034d957fef4b"}, + {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72407065ad459db9f3d052ea8c51e02534f02533fc61e51cbab3bd94166f086c"}, + {file = "rpds_py-0.22.1-cp311-cp311-win32.whl", hash = "sha256:eb013aa01b404219f28dc973d9e6310fd4db216d7299253dd355629952e0564e"}, + {file = "rpds_py-0.22.1-cp311-cp311-win_amd64.whl", hash = "sha256:8bd9ec1db79a664f4cbb12878693b73416f4d2cb425d3e27eccc1bdfbdc826ef"}, + {file = "rpds_py-0.22.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8ec41049c90d204a6561238a9ad6c7263ebb7009d9759c98b58078d9d2fec9ba"}, + {file = "rpds_py-0.22.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:102be79c4cc47a4aeb5912401185c404cd2601c15a7163bbecff7f1bfe20b669"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a603155db408f773637f9e3a712c6e3cbc521aaa8fa2b99f9ba6106c59a2496"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dbff9402c2bdf00bf0df9905694b3c292a3847c725651938a72f554351a5fcb"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96b3759d8ab2323324e0a92b2f44834f9d88089b8d1ab6f533b61f4be3411cef"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3029f481b31f329b1fdb4ec4b56935d82210ddd9c6f86ea5a87c06f1e97b161"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d280b4bf09f719b89fd9aab3b71067acc0d0449b7d1eba99a2ade4939cef8296"}, + {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8e97e19aa7b0b0d801a159f932ce4435f1049c8c38e2bb372bb5bee559ce50"}, + {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50e4b5d291105f7063259fe0125b1af902fb34499444d7c5c521dd8328b00939"}, + {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d3777c446bb1c5fcd82dc3f8776e1a146cd91e80cc1892f8634575ace438d22f"}, + {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:447ae1104fb32197b9262f772d565d38e834cc2e9edd89350b37b88fed636e70"}, + {file = "rpds_py-0.22.1-cp312-cp312-win32.whl", hash = "sha256:55d371b9d8b0c2a68a50413a8cb01c3c3ce1ea4f768bf77b66669a9a486e101e"}, + {file = "rpds_py-0.22.1-cp312-cp312-win_amd64.whl", hash = "sha256:413a30a99d8683dace3765885920ed27ab662efbb6c98d81db76c397ad1ffd71"}, + {file = "rpds_py-0.22.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa2ba0176037c915d8660a4e46581d645e2c22b5373e466bc8640a794d45861a"}, + {file = "rpds_py-0.22.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ba6c66fbc6015b2f99e7176fec41793cecb00c4cc357cad038dff85e6ac42ab"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15fa4ca658f8ad22645d3531682b17e5580832efbfa87304c3e62214c79c1e8a"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7833ef6f5d6cb634f296abfd93452fb3eb44c4e9a6ae95c1021eab704c1cee2"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0467838c90435b80793cde486a318fc916ee57f2af54e4b10c72b20cbdcbaa9"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d962e2e89b3a95e3597a34b8c93ced1e98958502c5b8096c9fd69deff279f561"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ce729f1dc8a4a190c34b69f75377bddc004079b2963ab722ab91fafe040be6d"}, + {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8080467df22feca0fc9c46567001777c6fbc2b4a2683a7137420896051874ca1"}, + {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0f9eb37d3a60b262a98ab51ee899cac039de9ca0ce68dcf1a6518a09719020b0"}, + {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:153248f48d6f90a295a502f53ec544a3ffbd21b0bb32f5dca39c4b93a764d6a2"}, + {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0a53592cdf98cec3dfcdb24ffec8a4797e7656b65700099af43ec7df023b6de4"}, + {file = "rpds_py-0.22.1-cp313-cp313-win32.whl", hash = "sha256:e8056adcefa2dcb67e8bc91ea5eee26df66e8b297a8cd6ff0903f85c70908fa0"}, + {file = "rpds_py-0.22.1-cp313-cp313-win_amd64.whl", hash = "sha256:a451dba533be77454ebcffc85189108fc05f279100835ac76e7989edacb89156"}, + {file = "rpds_py-0.22.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:2ea23f1525d4f64286dbe0947c929d45c3ffe963b2dbed1d3844a2e4938bda42"}, + {file = "rpds_py-0.22.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3aaa22487477de9618ce3b37f99fbe81219ba96f3c2ca84f576f0ab451b83aba"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8954b9ffe60f479a0c0ba40987db2546c735ab02a725ea7fd89342152d4d821d"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8502a02ae3ae67084f5a0bf5a8253b19fa7a887f824e41e016cdb0ac532a06f"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a083221b6a4ecdef38a60c95d8d3223d99449cb4da2544e9644958dc16664eb9"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:542eb246d5be31b5e0a9c8ddb9539416f9b31f58f75bd4ee328bff2b5c58d6fd"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffae97d28ea4f2c613a751d087b75a97fb78311b38cc2e9a2f4587e473ace167"}, + {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0ff8d5b13ce2357fa8b33a0a2e3775aa71df5bf7c8ba060634c9d15ab12f357"}, + {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f057a0c546c42964836b209d8de9ea1a4f4b0432006c6343cbe633d8ca14571"}, + {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:48ee97c7c6027fd423058675b5a39d0b5f7a1648250b671563d5c9f74ff13ff0"}, + {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:babec324e8654a59122aaa66936a9a483faa03276db9792f51332475c2dddc4a"}, + {file = "rpds_py-0.22.1-cp313-cp313t-win32.whl", hash = "sha256:e69acdbc132c9592c8dc393af85e38e206ca847c7019a953ff625191c3a12312"}, + {file = "rpds_py-0.22.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c783e4ed68200f4e03c125690d23158b1c49c4b186d458a18debc109bbdc3c2e"}, + {file = "rpds_py-0.22.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2143c3aed85992604d758bbe67da839fb4aab3dd2e1c6dddab5b3ca7162b34a2"}, + {file = "rpds_py-0.22.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f57e2d0f8022783426121b586d7c842ea40ea832a29e28ca36c881b54c74fb28"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c0c324879d483504b07f7b18eb1b50567c434263bbe4866ecce33056162668a"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c40e02cc4f3e18fd39344edb10eebe04bd11cfd13119606b5771e5ea51630d3"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f76c6f319e57007ad52e671ec741d801324760a377e3d4992c9bb8200333ebac"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5cae9b415ea8a6a563566dbf46650222eccc5971c7daa16fbee63aef92ae543"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b09209cdfcacf5eba9cf80367130532e6c02e695252e1f64d3cfcc2356e6e19f"}, + {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbe428d0ac6eacaf05402adbaf137f59ad6063848182d1ff294f95ce0f24005b"}, + {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:626b9feb01bff049a5aec4804f0c58db12585778b4902e5376a95b01f80a7a16"}, + {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec1ccc2a9f764cd632fb8ab28fdde166250df54fc8d97315a4a6948dc5367639"}, + {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ef92b1fbe6aa2e7885eb90853cc016b1fc95439a8cc8da6d526880e9e2148695"}, + {file = "rpds_py-0.22.1-cp39-cp39-win32.whl", hash = "sha256:c88535f83f7391cf3a45af990237e3939a6fdfbedaed2571633bfdd0bceb36b0"}, + {file = "rpds_py-0.22.1-cp39-cp39-win_amd64.whl", hash = "sha256:7839b7528faa4d134c183b1f2dd1ee4dc2ca2f899f4f0cfdf00fc04c255262a7"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0ed14a4162c2c2b21a162c9fcf90057e3e7da18cd171ab344c1e1664f75090e"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:05fdeae9010533e47715c37df83264df0122584e40d691d50cf3607c060952a3"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4659b2e4a5008715099e216050f5c6976e5a4329482664411789968b82e3f17d"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a18aedc032d6468b73ebbe4437129cb30d54fe543cde2f23671ecad76c3aea24"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149b4d875ef9b12a8f5e303e86a32a58f8ef627e57ec97a7d0e4be819069d141"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdaee3947eaaa52dae3ceb9d9f66329e13d8bae35682b1e5dd54612938693934"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ce951800ed2acc6772fd9f42150f29d567f0423989748052fdb39d9e2b5795"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab784621d3e2a41916e21f13a483602cc989fd45fff637634b9231ba43d4383b"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c2a214bf5b79bd39a9de1c991353aaaacafda83ba1374178309e92be8e67d411"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:85060e96953647871957d41707adb8d7bff4e977042fd0deb4fc1881b98dd2fe"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c6f3fd617db422c9d4e12cb8d84c984fe07d6d9cb0950cbf117f3bccc6268d05"}, + {file = "rpds_py-0.22.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f2d1b58a0c3a73f0361759642e80260a6d28eee6501b40fe25b82af33ef83f21"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:76eaa4c087a061a2c8a0a92536405069878a8f530c00e84a9eaf332e70f5561f"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:959ae04ed30cde606f3a0320f0a1f4167a107e685ef5209cce28c5080590bd31"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:198067aa6f3d942ff5d0d655bb1e91b59ae85279d47590682cba2834ac1b97d2"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e7e99e2af59c56c59b6c964d612511b8203480d39d1ef83edc56f2cb42a3f5d"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0545928bdf53dfdfcab284468212efefb8a6608ca3b6910c7fb2e5ed8bdc2dc0"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef7282d8a14b60dd515e47060638687710b1d518f4b5e961caad43fb3a3606f9"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe3f245c2f39a5692d9123c174bc48f6f9fe3e96407e67c6d04541a767d99e72"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efb2ad60ca8637d5f9f653f9a9a8d73964059972b6b95036be77e028bffc68a3"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d8306f27418361b788e3fca9f47dec125457f80122e7e31ba7ff5cdba98343f8"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4c8dc7331e8cbb1c0ea2bcb550adb1777365944ffd125c69aa1117fdef4887f5"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:776a06cb5720556a549829896a49acebb5bdd96c7bba100191a994053546975a"}, + {file = "rpds_py-0.22.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e4f91d702b9ce1388660b3d4a28aa552614a1399e93f718ed0dacd68f23b3d32"}, + {file = "rpds_py-0.22.1.tar.gz", hash = "sha256:157a023bded0618a1eea54979fe2e0f9309e9ddc818ef4b8fc3b884ff38fedd5"}, ] [[package]] @@ -7647,4 +7657,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "33ee730cf750e618ec005ad44ad09617bc8f95632b30ac02b5290a03a33bdf5b" +content-hash = "9937d92a9800a7064976f0e1f797c5da648e635c7b331904ad302dacef961ecc" diff --git a/pyproject.toml b/pyproject.toml index e41e4236..672a3487 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,8 +25,8 @@ packages = [{include = "docling"}] # actual dependencies: ###################### python = "^3.9" -pydantic = ">=2.0.0,<2.10" -docling-core = "^2.6.1" +pydantic = "^2.0.0" +docling-core = "^2.7.0" docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" From b730b2d7a04a8773a00ed88889d28b0c476ba052 Mon Sep 17 00:00:00 2001 From: Maxim Lysak <101627549+maxmnemonic@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:37:25 +0100 Subject: [PATCH 38/40] fix: Missing text in docx (t tag) when embedded in a table (#528) Fix for missing text in docx (t tag) when embedded in a table Signed-off-by: Maksym Lysak Co-authored-by: Maksym Lysak --- docling/backend/msword_backend.py | 33 +++++++++++++++++++------------ 1 file changed, 20 insertions(+), 13 deletions(-) diff --git a/docling/backend/msword_backend.py b/docling/backend/msword_backend.py index 05508712..bab956a7 100644 --- a/docling/backend/msword_backend.py +++ b/docling/backend/msword_backend.py @@ -133,7 +133,6 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): def walk_linear(self, body, docx_obj, doc) -> DoclingDocument: for element in body: tag_name = etree.QName(element).localname - # Check for Inline Images (blip elements) namespaces = { "a": "http://schemas.openxmlformats.org/drawingml/2006/main", @@ -153,6 +152,7 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): self.handle_pictures(element, docx_obj, drawing_blip, doc) # Check for Text elif tag_name in ["p"]: + # "tcPr", "sectPr" self.handle_text_elements(element, docx_obj, doc) else: _log.debug(f"Ignoring element in DOCX with tag: {tag_name}") @@ -219,7 +219,6 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): if paragraph.text is None: return text = paragraph.text.strip() - # if len(text)==0 # keep empty paragraphs, they seperate adjacent lists! # Common styles for bullet and numbered lists. # "List Bullet", "List Number", "List Paragraph" @@ -291,9 +290,7 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): def add_header(self, element, docx_obj, doc, curr_name, curr_level, text: str): level = self.get_level() if isinstance(curr_level, int): - if curr_level > level: - # add invisible group for i in range(level, curr_level): self.parents[i] = doc.add_group( @@ -301,9 +298,7 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): label=GroupLabel.SECTION, name=f"header-{i}", ) - elif curr_level < level: - # remove the tail for key, val in self.parents.items(): if key >= curr_level: @@ -314,7 +309,6 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): text=text, level=curr_level, ) - else: self.parents[self.level] = doc.add_heading( parent=self.parents[self.level - 1], @@ -346,7 +340,7 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): label=GroupLabel.LIST, name="list", parent=self.parents[level - 1] ) - # TODO: Set marker and enumerated arguments if this is an enumeration element. + # Set marker and enumerated arguments if this is an enumeration element. self.listIter += 1 if is_numbered: enum_marker = str(self.listIter) + "." @@ -365,8 +359,8 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): self.level_at_new_list + self.prev_indent() + 1, self.level_at_new_list + ilevel + 1, ): - # TODO: determine if this is an unordered list or an ordered list. - # Set GroupLabel.ORDERED_LIST when it fits. + # Determine if this is an unordered list or an ordered list. + # Set GroupLabel.ORDERED_LIST when it fits. self.listIter = 0 if is_numbered: self.parents[i] = doc.add_group( @@ -467,6 +461,19 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): row_span = get_rowspan(cell) col_span = get_colspan(cell) + cell_text = cell.text + # In case cell doesn't return text via docx library: + if len(cell_text) == 0: + cell_xml = cell._element + + texts = [""] + for elem in cell_xml.iter(): + if elem.tag.endswith("t"): # tags that contain text + if elem.text: + texts.append(elem.text) + # Join the collected text + cell_text = " ".join(texts).strip() + # Find the next available column in the grid while table_grid[row_idx][col_idx] is not None: col_idx += 1 @@ -477,15 +484,15 @@ class MsWordDocumentBackend(DeclarativeDocumentBackend): table_grid[row_idx + i][col_idx + j] = "" cell = TableCell( - text=cell.text, + text=cell_text, row_span=row_span, col_span=col_span, start_row_offset_idx=row_idx, end_row_offset_idx=row_idx + row_span, start_col_offset_idx=col_idx, end_col_offset_idx=col_idx + col_span, - col_header=False, # col_header, - row_header=False, # ((not col_header) and html_cell.name=='th') + col_header=False, + row_header=False, ) data.table_cells.append(cell) From 0d11e30dd813020c0189de849cd7b2e285d08694 Mon Sep 17 00:00:00 2001 From: "Peter W. J. Staar" <91719829+PeterStaar-IBM@users.noreply.github.com> Date: Fri, 6 Dec 2024 12:37:57 +0100 Subject: [PATCH 39/40] fix: Enable HTML export in CLI and add options for image mode (#513) * updated README Signed-off-by: Peter Staar * removed duck in title Signed-off-by: Peter Staar * updated the index.md Signed-off-by: Peter Staar * updated the cli to export html Signed-off-by: Peter Staar * added html to cli Signed-off-by: Peter Staar * reformatted the code Signed-off-by: Peter Staar * removed the duck emoji, added the in the cli. Currently, the referenced seems broken Signed-off-by: Peter Staar * cleaning up the comments Signed-off-by: Peter Staar * reference is now working Signed-off-by: Peter Staar * Clean up styling and docs Signed-off-by: Christoph Auer * Pin docling-core>=2.7.1 Signed-off-by: Christoph Auer --------- Signed-off-by: Peter Staar Signed-off-by: Christoph Auer Co-authored-by: Christoph Auer --- README.md | 4 +- docling/cli/main.py | 58 +++- docling/datamodel/base_models.py | 1 + docs/index.md | 2 +- mkdocs.yml | 2 +- poetry.lock | 570 +++++++++++++------------------ pyproject.toml | 2 +- 7 files changed, 288 insertions(+), 351 deletions(-) diff --git a/README.md b/README.md index cafb15b4..98222f83 100644 --- a/README.md +++ b/README.md @@ -4,7 +4,7 @@

    -# 🦆 Docling +# Docling

    DS4SD%2Fdocling | Trendshift @@ -26,7 +26,7 @@ Docling parses documents and exports them to the desired format with ease and sp ## Features -* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON +* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to HTML, Markdown and JSON (with embedded and referenced images) * 📑 Advanced PDF document understanding including page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](https://ds4sd.github.io/docling/concepts/docling_document/) representation format * 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications diff --git a/docling/cli/main.py b/docling/cli/main.py index 87a93d15..ee18be97 100644 --- a/docling/cli/main.py +++ b/docling/cli/main.py @@ -10,6 +10,7 @@ from pathlib import Path from typing import Annotated, Dict, Iterable, List, Optional, Type import typer +from docling_core.types.doc import ImageRefMode from docling_core.utils.file import resolve_source_to_path from pydantic import TypeAdapter, ValidationError @@ -87,9 +88,11 @@ def export_documents( conv_results: Iterable[ConversionResult], output_dir: Path, export_json: bool, + export_html: bool, export_md: bool, export_txt: bool, export_doctags: bool, + image_export_mode: ImageRefMode, ): success_count = 0 @@ -100,33 +103,45 @@ def export_documents( success_count += 1 doc_filename = conv_res.input.file.stem - # Export Deep Search document JSON format: + # Export JSON format: if export_json: fname = output_dir / f"{doc_filename}.json" - with fname.open("w", encoding="utf8") as fp: - _log.info(f"writing JSON output to {fname}") - fp.write(json.dumps(conv_res.document.export_to_dict())) + _log.info(f"writing JSON output to {fname}") + conv_res.document.save_as_json( + filename=fname, image_mode=image_export_mode + ) + + # Export HTML format: + if export_html: + fname = output_dir / f"{doc_filename}.html" + _log.info(f"writing HTML output to {fname}") + conv_res.document.save_as_html( + filename=fname, image_mode=image_export_mode + ) # Export Text format: if export_txt: fname = output_dir / f"{doc_filename}.txt" - with fname.open("w", encoding="utf8") as fp: - _log.info(f"writing Text output to {fname}") - fp.write(conv_res.document.export_to_markdown(strict_text=True)) + _log.info(f"writing TXT output to {fname}") + conv_res.document.save_as_markdown( + filename=fname, + strict_text=True, + image_mode=ImageRefMode.PLACEHOLDER, + ) # Export Markdown format: if export_md: fname = output_dir / f"{doc_filename}.md" - with fname.open("w", encoding="utf8") as fp: - _log.info(f"writing Markdown output to {fname}") - fp.write(conv_res.document.export_to_markdown()) + _log.info(f"writing Markdown output to {fname}") + conv_res.document.save_as_markdown( + filename=fname, image_mode=image_export_mode + ) # Export Document Tags format: if export_doctags: fname = output_dir / f"{doc_filename}.doctags" - with fname.open("w", encoding="utf8") as fp: - _log.info(f"writing Doc Tags output to {fname}") - fp.write(conv_res.document.export_to_document_tokens()) + _log.info(f"writing Doc Tags output to {fname}") + conv_res.document.save_as_document_tokens(filename=fname) else: _log.warning(f"Document {conv_res.input.file} failed to convert.") @@ -161,6 +176,13 @@ def convert( to_formats: List[OutputFormat] = typer.Option( None, "--to", help="Specify output formats. Defaults to Markdown." ), + image_export_mode: Annotated[ + ImageRefMode, + typer.Option( + ..., + help="Image export mode for the document (only in case of JSON, Markdown or HTML). With `placeholder`, only the position of the image is marked in the output. In `embedded` mode, the image is embedded as base64 encoded string. In `referenced` mode, the image is exported in PNG format and referenced from the main exported document.", + ), + ] = ImageRefMode.EMBEDDED, ocr: Annotated[ bool, typer.Option( @@ -299,6 +321,7 @@ def convert( to_formats = [OutputFormat.MARKDOWN] export_json = OutputFormat.JSON in to_formats + export_html = OutputFormat.HTML in to_formats export_md = OutputFormat.MARKDOWN in to_formats export_txt = OutputFormat.TEXT in to_formats export_doctags = OutputFormat.DOCTAGS in to_formats @@ -330,6 +353,13 @@ def convert( ) pipeline_options.table_structure_options.mode = table_mode + if image_export_mode != ImageRefMode.PLACEHOLDER: + pipeline_options.generate_page_images = True + pipeline_options.generate_picture_images = ( + True # FIXME: to be deprecated in verson 3 + ) + pipeline_options.images_scale = 2 + if artifacts_path is not None: pipeline_options.artifacts_path = artifacts_path @@ -364,9 +394,11 @@ def convert( conv_results, output_dir=output, export_json=export_json, + export_html=export_html, export_md=export_md, export_txt=export_txt, export_doctags=export_doctags, + image_export_mode=image_export_mode, ) end_time = time.time() - start_time diff --git a/docling/datamodel/base_models.py b/docling/datamodel/base_models.py index 55a19ac3..b71c0f97 100644 --- a/docling/datamodel/base_models.py +++ b/docling/datamodel/base_models.py @@ -41,6 +41,7 @@ class InputFormat(str, Enum): class OutputFormat(str, Enum): MARKDOWN = "md" JSON = "json" + HTML = "html" TEXT = "text" DOCTAGS = "doctags" diff --git a/docs/index.md b/docs/index.md index 3ae3ceb6..7b741728 100644 --- a/docs/index.md +++ b/docs/index.md @@ -18,7 +18,7 @@ Docling parses documents and exports them to the desired format with ease and sp ## Features -* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON +* 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to HTML, Markdown and JSON (with embedded and referenced images) * 📑 Advanced PDF document understanding incl. page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](./concepts/docling_document.md) representation format * 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications diff --git a/mkdocs.yml b/mkdocs.yml index 731e2ee6..f118edbd 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -53,7 +53,7 @@ theme: - toc.follow nav: - Home: - - "🦆 Docling": index.md + - "Docling": index.md - Installation: installation.md - Usage: usage.md - CLI: cli.md diff --git a/poetry.lock b/poetry.lock index d2a3876d..becf1b33 100644 --- a/poetry.lock +++ b/poetry.lock @@ -13,87 +13,87 @@ files = [ [[package]] name = "aiohttp" -version = "3.11.9" +version = "3.11.10" description = "Async http client/server framework (asyncio)" optional = false python-versions = ">=3.9" files = [ - {file = "aiohttp-3.11.9-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:0411777249f25d11bd2964a230b3ffafcbed6cd65d0f2b132bc2b8f5b8c347c7"}, - {file = "aiohttp-3.11.9-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:499368eb904566fbdf1a3836a1532000ef1308f34a1bcbf36e6351904cced771"}, - {file = "aiohttp-3.11.9-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:0b5a5009b0159a8f707879dc102b139466d8ec6db05103ec1520394fdd8ea02c"}, - {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:176f8bb8931da0613bb0ed16326d01330066bb1e172dd97e1e02b1c27383277b"}, - {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6435a66957cdba1a0b16f368bde03ce9c79c57306b39510da6ae5312a1a5b2c1"}, - {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:202f40fb686e5f93908eee0c75d1e6fbe50a43e9bd4909bf3bf4a56b560ca180"}, - {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:39625703540feb50b6b7f938b3856d1f4886d2e585d88274e62b1bd273fae09b"}, - {file = "aiohttp-3.11.9-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c6beeac698671baa558e82fa160be9761cf0eb25861943f4689ecf9000f8ebd0"}, - {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:96726839a42429318017e67a42cca75d4f0d5248a809b3cc2e125445edd7d50d"}, - {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:3f5461c77649358610fb9694e790956b4238ac5d9e697a17f63619c096469afe"}, - {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:4313f3bc901255b22f01663eeeae167468264fdae0d32c25fc631d5d6e15b502"}, - {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:d6e274661c74195708fc4380a4ef64298926c5a50bb10fbae3d01627d7a075b7"}, - {file = "aiohttp-3.11.9-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:db2914de2559809fdbcf3e48f41b17a493b58cb7988d3e211f6b63126c55fe82"}, - {file = "aiohttp-3.11.9-cp310-cp310-win32.whl", hash = "sha256:27935716f8d62c1c73010428db310fd10136002cfc6d52b0ba7bdfa752d26066"}, - {file = "aiohttp-3.11.9-cp310-cp310-win_amd64.whl", hash = "sha256:afbe85b50ade42ddff5669947afde9e8a610e64d2c80be046d67ec4368e555fa"}, - {file = "aiohttp-3.11.9-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:afcda759a69c6a8be3aae764ec6733155aa4a5ad9aad4f398b52ba4037942fe3"}, - {file = "aiohttp-3.11.9-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c5bba6b83fde4ca233cfda04cbd4685ab88696b0c8eaf76f7148969eab5e248a"}, - {file = "aiohttp-3.11.9-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:442356e8924fe1a121f8c87866b0ecdc785757fd28924b17c20493961b3d6697"}, - {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f737fef6e117856400afee4f17774cdea392b28ecf058833f5eca368a18cf1bf"}, - {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ea142255d4901b03f89cb6a94411ecec117786a76fc9ab043af8f51dd50b5313"}, - {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6e1e9e447856e9b7b3d38e1316ae9a8c92e7536ef48373de758ea055edfd5db5"}, - {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e7f6173302f8a329ca5d1ee592af9e628d3ade87816e9958dcf7cdae2841def7"}, - {file = "aiohttp-3.11.9-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a7c6147c6306f537cff59409609508a1d2eff81199f0302dd456bb9e7ea50c39"}, - {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e9d036a9a41fc78e8a3f10a86c2fc1098fca8fab8715ba9eb999ce4788d35df0"}, - {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:2ac9fd83096df36728da8e2f4488ac3b5602238f602706606f3702f07a13a409"}, - {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:d3108f0ad5c6b6d78eec5273219a5bbd884b4aacec17883ceefaac988850ce6e"}, - {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:96bbec47beb131bbf4bae05d8ef99ad9e5738f12717cfbbf16648b78b0232e87"}, - {file = "aiohttp-3.11.9-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fc726c3fa8f606d07bd2b500e5dc4c0fd664c59be7788a16b9e34352c50b6b6b"}, - {file = "aiohttp-3.11.9-cp311-cp311-win32.whl", hash = "sha256:5720ebbc7a1b46c33a42d489d25d36c64c419f52159485e55589fbec648ea49a"}, - {file = "aiohttp-3.11.9-cp311-cp311-win_amd64.whl", hash = "sha256:17af09d963fa1acd7e4c280e9354aeafd9e3d47eaa4a6bfbd2171ad7da49f0c5"}, - {file = "aiohttp-3.11.9-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:c1f2d7fd583fc79c240094b3e7237d88493814d4b300d013a42726c35a734bc9"}, - {file = "aiohttp-3.11.9-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:d4b8a1b6c7a68c73191f2ebd3bf66f7ce02f9c374e309bdb68ba886bbbf1b938"}, - {file = "aiohttp-3.11.9-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:bd3f711f4c99da0091ced41dccdc1bcf8be0281dc314d6d9c6b6cf5df66f37a9"}, - {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44cb1a1326a0264480a789e6100dc3e07122eb8cd1ad6b784a3d47d13ed1d89c"}, - {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:7a7ddf981a0b953ade1c2379052d47ccda2f58ab678fca0671c7c7ca2f67aac2"}, - {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ffa45cc55b18d4ac1396d1ddb029f139b1d3480f1594130e62bceadf2e1a838"}, - {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:cca505829cdab58c2495ff418c96092d225a1bbd486f79017f6de915580d3c44"}, - {file = "aiohttp-3.11.9-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:44d323aa80a867cb6db6bebb4bbec677c6478e38128847f2c6b0f70eae984d72"}, - {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:b2fab23003c4bb2249729a7290a76c1dda38c438300fdf97d4e42bf78b19c810"}, - {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:be0c7c98e38a1e3ad7a6ff64af8b6d6db34bf5a41b1478e24c3c74d9e7f8ed42"}, - {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:5cc5e0d069c56645446c45a4b5010d4b33ac6c5ebfd369a791b5f097e46a3c08"}, - {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:9bcf97b971289be69638d8b1b616f7e557e1342debc7fc86cf89d3f08960e411"}, - {file = "aiohttp-3.11.9-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c7333e7239415076d1418dbfb7fa4df48f3a5b00f8fdf854fca549080455bc14"}, - {file = "aiohttp-3.11.9-cp312-cp312-win32.whl", hash = "sha256:9384b07cfd3045b37b05ed002d1c255db02fb96506ad65f0f9b776b762a7572e"}, - {file = "aiohttp-3.11.9-cp312-cp312-win_amd64.whl", hash = "sha256:f5252ba8b43906f206048fa569debf2cd0da0316e8d5b4d25abe53307f573941"}, - {file = "aiohttp-3.11.9-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:282e0a7ddd36ebc411f156aeaa0491e8fe7f030e2a95da532cf0c84b0b70bc66"}, - {file = "aiohttp-3.11.9-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:ebd3e6b0c7d4954cca59d241970011f8d3327633d555051c430bd09ff49dc494"}, - {file = "aiohttp-3.11.9-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:30f9f89ae625d412043f12ca3771b2ccec227cc93b93bb1f994db6e1af40a7d3"}, - {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7a3b5b2c012d70c63d9d13c57ed1603709a4d9d7d473e4a9dfece0e4ea3d5f51"}, - {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6ef1550bb5f55f71b97a6a395286db07f7f2c01c8890e613556df9a51da91e8d"}, - {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:317251b9c9a2f1a9ff9cd093775b34c6861d1d7df9439ce3d32a88c275c995cd"}, - {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21cbe97839b009826a61b143d3ca4964c8590d7aed33d6118125e5b71691ca46"}, - {file = "aiohttp-3.11.9-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:618b18c3a2360ac940a5503da14fa4f880c5b9bc315ec20a830357bcc62e6bae"}, - {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:a0cf4d814689e58f57ecd5d8c523e6538417ca2e72ff52c007c64065cef50fb2"}, - {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:15c4e489942d987d5dac0ba39e5772dcbed4cc9ae3710d1025d5ba95e4a5349c"}, - {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:ec8df0ff5a911c6d21957a9182402aad7bf060eaeffd77c9ea1c16aecab5adbf"}, - {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:ed95d66745f53e129e935ad726167d3a6cb18c5d33df3165974d54742c373868"}, - {file = "aiohttp-3.11.9-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:647ec5bee7e4ec9f1034ab48173b5fa970d9a991e565549b965e93331f1328fe"}, - {file = "aiohttp-3.11.9-cp313-cp313-win32.whl", hash = "sha256:ef2c9499b7bd1e24e473dc1a85de55d72fd084eea3d8bdeec7ee0720decb54fa"}, - {file = "aiohttp-3.11.9-cp313-cp313-win_amd64.whl", hash = "sha256:84de955314aa5e8d469b00b14d6d714b008087a0222b0f743e7ffac34ef56aff"}, - {file = "aiohttp-3.11.9-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e738aabff3586091221044b7a584865ddc4d6120346d12e28e788307cd731043"}, - {file = "aiohttp-3.11.9-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:28f29bce89c3b401a53d6fd4bee401ee943083bf2bdc12ef297c1d63155070b0"}, - {file = "aiohttp-3.11.9-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:31de2f10f63f96cc19e04bd2df9549559beadd0b2ee2da24a17e7ed877ca8c60"}, - {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:77f31cebd8c27a36af6c7346055ac564946e562080ee1a838da724585c67474f"}, - {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0bcb7f6976dc0b6b56efde13294862adf68dd48854111b422a336fa729a82ea6"}, - {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1a8b13b9950d8b2f8f58b6e5842c4b842b5887e2c32e3f4644d6642f1659a530"}, - {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c9c23e62f3545c2216100603614f9e019e41b9403c47dd85b8e7e5015bf1bde0"}, - {file = "aiohttp-3.11.9-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ec656680fc53a13f849c71afd0c84a55c536206d524cbc831cde80abbe80489e"}, - {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:36df00e0541f264ce42d62280281541a47474dfda500bc5b7f24f70a7f87be7a"}, - {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:8dcfd14c712aa9dd18049280bfb2f95700ff6a8bde645e09f17c3ed3f05a0130"}, - {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:14624d96f0d69cf451deed3173079a68c322279be6030208b045ab77e1e8d550"}, - {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:4b01d9cfcb616eeb6d40f02e66bebfe7b06d9f2ef81641fdd50b8dd981166e0b"}, - {file = "aiohttp-3.11.9-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:928f92f80e2e8d6567b87d3316c1fd9860ccfe36e87a9a7f5237d4cda8baa1ba"}, - {file = "aiohttp-3.11.9-cp39-cp39-win32.whl", hash = "sha256:c8a02f74ae419e3955af60f570d83187423e42e672a6433c5e292f1d23619269"}, - {file = "aiohttp-3.11.9-cp39-cp39-win_amd64.whl", hash = "sha256:0a97d657f6cf8782a830bb476c13f7d777cfcab8428ac49dde15c22babceb361"}, - {file = "aiohttp-3.11.9.tar.gz", hash = "sha256:a9266644064779840feec0e34f10a89b3ff1d2d6b751fe90017abcad1864fa7c"}, + {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cbad88a61fa743c5d283ad501b01c153820734118b65aee2bd7dbb735475ce0d"}, + {file = "aiohttp-3.11.10-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:80886dac673ceaef499de2f393fc80bb4481a129e6cb29e624a12e3296cc088f"}, + {file = "aiohttp-3.11.10-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:61b9bae80ed1f338c42f57c16918853dc51775fb5cb61da70d590de14d8b5fb4"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9e2e576caec5c6a6b93f41626c9c02fc87cd91538b81a3670b2e04452a63def6"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:02c13415b5732fb6ee7ff64583a5e6ed1c57aa68f17d2bda79c04888dfdc2769"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4cfce37f31f20800a6a6620ce2cdd6737b82e42e06e6e9bd1b36f546feb3c44f"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3bbbfff4c679c64e6e23cb213f57cc2c9165c9a65d63717108a644eb5a7398df"}, + {file = "aiohttp-3.11.10-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:49c7dbbc1a559ae14fc48387a115b7d4bbc84b4a2c3b9299c31696953c2a5219"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:68386d78743e6570f054fe7949d6cb37ef2b672b4d3405ce91fafa996f7d9b4d"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:9ef405356ba989fb57f84cac66f7b0260772836191ccefbb987f414bcd2979d9"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_ppc64le.whl", hash = "sha256:5d6958671b296febe7f5f859bea581a21c1d05430d1bbdcf2b393599b1cdce77"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_s390x.whl", hash = "sha256:99b7920e7165be5a9e9a3a7f1b680f06f68ff0d0328ff4079e5163990d046767"}, + {file = "aiohttp-3.11.10-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:0dc49f42422163efb7e6f1df2636fe3db72713f6cd94688e339dbe33fe06d61d"}, + {file = "aiohttp-3.11.10-cp310-cp310-win32.whl", hash = "sha256:40d1c7a7f750b5648642586ba7206999650208dbe5afbcc5284bcec6579c9b91"}, + {file = "aiohttp-3.11.10-cp310-cp310-win_amd64.whl", hash = "sha256:68ff6f48b51bd78ea92b31079817aff539f6c8fc80b6b8d6ca347d7c02384e33"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:77c4aa15a89847b9891abf97f3d4048f3c2d667e00f8a623c89ad2dccee6771b"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:909af95a72cedbefe5596f0bdf3055740f96c1a4baa0dd11fd74ca4de0b4e3f1"}, + {file = "aiohttp-3.11.10-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:386fbe79863eb564e9f3615b959e28b222259da0c48fd1be5929ac838bc65683"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3de34936eb1a647aa919655ff8d38b618e9f6b7f250cc19a57a4bf7fd2062b6d"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0c9527819b29cd2b9f52033e7fb9ff08073df49b4799c89cb5754624ecd98299"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65a96e3e03300b41f261bbfd40dfdbf1c301e87eab7cd61c054b1f2e7c89b9e8"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98f5635f7b74bcd4f6f72fcd85bea2154b323a9f05226a80bc7398d0c90763b0"}, + {file = "aiohttp-3.11.10-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:03b6002e20938fc6ee0918c81d9e776bebccc84690e2b03ed132331cca065ee5"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:6362cc6c23c08d18ddbf0e8c4d5159b5df74fea1a5278ff4f2c79aed3f4e9f46"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:3691ed7726fef54e928fe26344d930c0c8575bc968c3e239c2e1a04bd8cf7838"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_ppc64le.whl", hash = "sha256:31d5093d3acd02b31c649d3a69bb072d539d4c7659b87caa4f6d2bcf57c2fa2b"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_s390x.whl", hash = "sha256:8b3cf2dc0f0690a33f2d2b2cb15db87a65f1c609f53c37e226f84edb08d10f52"}, + {file = "aiohttp-3.11.10-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:fbbaea811a2bba171197b08eea288b9402faa2bab2ba0858eecdd0a4105753a3"}, + {file = "aiohttp-3.11.10-cp311-cp311-win32.whl", hash = "sha256:4b2c7ac59c5698a7a8207ba72d9e9c15b0fc484a560be0788b31312c2c5504e4"}, + {file = "aiohttp-3.11.10-cp311-cp311-win_amd64.whl", hash = "sha256:974d3a2cce5fcfa32f06b13ccc8f20c6ad9c51802bb7f829eae8a1845c4019ec"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_universal2.whl", hash = "sha256:b78f053a7ecfc35f0451d961dacdc671f4bcbc2f58241a7c820e9d82559844cf"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_10_13_x86_64.whl", hash = "sha256:ab7485222db0959a87fbe8125e233b5a6f01f4400785b36e8a7878170d8c3138"}, + {file = "aiohttp-3.11.10-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:cf14627232dfa8730453752e9cdc210966490992234d77ff90bc8dc0dce361d5"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:076bc454a7e6fd646bc82ea7f98296be0b1219b5e3ef8a488afbdd8e81fbac50"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:482cafb7dc886bebeb6c9ba7925e03591a62ab34298ee70d3dd47ba966370d2c"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf3d1a519a324af764a46da4115bdbd566b3c73fb793ffb97f9111dbc684fc4d"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:24213ba85a419103e641e55c27dc7ff03536c4873470c2478cce3311ba1eee7b"}, + {file = "aiohttp-3.11.10-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b99acd4730ad1b196bfb03ee0803e4adac371ae8efa7e1cbc820200fc5ded109"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:14cdb5a9570be5a04eec2ace174a48ae85833c2aadc86de68f55541f66ce42ab"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:7e97d622cb083e86f18317282084bc9fbf261801b0192c34fe4b1febd9f7ae69"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_ppc64le.whl", hash = "sha256:012f176945af138abc10c4a48743327a92b4ca9adc7a0e078077cdb5dbab7be0"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_s390x.whl", hash = "sha256:44224d815853962f48fe124748227773acd9686eba6dc102578defd6fc99e8d9"}, + {file = "aiohttp-3.11.10-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:c87bf31b7fdab94ae3adbe4a48e711bfc5f89d21cf4c197e75561def39e223bc"}, + {file = "aiohttp-3.11.10-cp312-cp312-win32.whl", hash = "sha256:06a8e2ee1cbac16fe61e51e0b0c269400e781b13bcfc33f5425912391a542985"}, + {file = "aiohttp-3.11.10-cp312-cp312-win_amd64.whl", hash = "sha256:be2b516f56ea883a3e14dda17059716593526e10fb6303189aaf5503937db408"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_universal2.whl", hash = "sha256:8cc5203b817b748adccb07f36390feb730b1bc5f56683445bfe924fc270b8816"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_10_13_x86_64.whl", hash = "sha256:5ef359ebc6949e3a34c65ce20230fae70920714367c63afd80ea0c2702902ccf"}, + {file = "aiohttp-3.11.10-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:9bca390cb247dbfaec3c664326e034ef23882c3f3bfa5fbf0b56cad0320aaca5"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:811f23b3351ca532af598405db1093f018edf81368e689d1b508c57dcc6b6a32"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ddf5f7d877615f6a1e75971bfa5ac88609af3b74796ff3e06879e8422729fd01"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:6ab29b8a0beb6f8eaf1e5049252cfe74adbaafd39ba91e10f18caeb0e99ffb34"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c49a76c1038c2dd116fa443eba26bbb8e6c37e924e2513574856de3b6516be99"}, + {file = "aiohttp-3.11.10-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:7f3dc0e330575f5b134918976a645e79adf333c0a1439dcf6899a80776c9ab39"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:efb15a17a12497685304b2d976cb4939e55137df7b09fa53f1b6a023f01fcb4e"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:db1d0b28fcb7f1d35600150c3e4b490775251dea70f894bf15c678fdd84eda6a"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_ppc64le.whl", hash = "sha256:15fccaf62a4889527539ecb86834084ecf6e9ea70588efde86e8bc775e0e7542"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_s390x.whl", hash = "sha256:593c114a2221444f30749cc5e5f4012488f56bd14de2af44fe23e1e9894a9c60"}, + {file = "aiohttp-3.11.10-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:7852bbcb4d0d2f0c4d583f40c3bc750ee033265d80598d0f9cb6f372baa6b836"}, + {file = "aiohttp-3.11.10-cp313-cp313-win32.whl", hash = "sha256:65e55ca7debae8faaffee0ebb4b47a51b4075f01e9b641c31e554fd376595c6c"}, + {file = "aiohttp-3.11.10-cp313-cp313-win_amd64.whl", hash = "sha256:beb39a6d60a709ae3fb3516a1581777e7e8b76933bb88c8f4420d875bb0267c6"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:0580f2e12de2138f34debcd5d88894786453a76e98febaf3e8fe5db62d01c9bf"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a55d2ad345684e7c3dd2c20d2f9572e9e1d5446d57200ff630e6ede7612e307f"}, + {file = "aiohttp-3.11.10-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:04814571cb72d65a6899db6099e377ed00710bf2e3eafd2985166f2918beaf59"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e44a9a3c053b90c6f09b1bb4edd880959f5328cf63052503f892c41ea786d99f"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:502a1464ccbc800b4b1995b302efaf426e8763fadf185e933c2931df7db9a199"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:613e5169f8ae77b1933e42e418a95931fb4867b2991fc311430b15901ed67079"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4cca22a61b7fe45da8fc73c3443150c3608750bbe27641fc7558ec5117b27fdf"}, + {file = "aiohttp-3.11.10-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:86a5dfcc39309470bd7b68c591d84056d195428d5d2e0b5ccadfbaf25b026ebc"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:77ae58586930ee6b2b6f696c82cf8e78c8016ec4795c53e36718365f6959dc82"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:78153314f26d5abef3239b4a9af20c229c6f3ecb97d4c1c01b22c4f87669820c"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_ppc64le.whl", hash = "sha256:98283b94cc0e11c73acaf1c9698dea80c830ca476492c0fe2622bd931f34b487"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_s390x.whl", hash = "sha256:53bf2097e05c2accc166c142a2090e4c6fd86581bde3fd9b2d3f9e93dda66ac1"}, + {file = "aiohttp-3.11.10-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:c5532f0441fc09c119e1dca18fbc0687e64fbeb45aa4d6a87211ceaee50a74c4"}, + {file = "aiohttp-3.11.10-cp39-cp39-win32.whl", hash = "sha256:47ad15a65fb41c570cd0ad9a9ff8012489e68176e7207ec7b82a0940dddfd8be"}, + {file = "aiohttp-3.11.10-cp39-cp39-win_amd64.whl", hash = "sha256:c6b9e6d7e41656d78e37ce754813fa44b455c3d0d0dced2a047def7dc5570b74"}, + {file = "aiohttp-3.11.10.tar.gz", hash = "sha256:b1fc6b45010a8d0ff9e88f9f2418c6fd408c99c211257334aff41597ebece42e"}, ] [package.dependencies] @@ -136,24 +136,24 @@ files = [ [[package]] name = "anyio" -version = "4.6.2.post1" +version = "4.7.0" description = "High level compatibility layer for multiple asynchronous event loop implementations" optional = false python-versions = ">=3.9" files = [ - {file = "anyio-4.6.2.post1-py3-none-any.whl", hash = "sha256:6d170c36fba3bdd840c73d3868c1e777e33676a69c3a72cf0a0d5d6d8009b61d"}, - {file = "anyio-4.6.2.post1.tar.gz", hash = "sha256:4c8bc31ccdb51c7f7bd251f51c609e038d63e34219b44aa86e47576389880b4c"}, + {file = "anyio-4.7.0-py3-none-any.whl", hash = "sha256:ea60c3723ab42ba6fff7e8ccb0488c898ec538ff4df1f1d5e642c3601d07e352"}, + {file = "anyio-4.7.0.tar.gz", hash = "sha256:2f834749c602966b7d456a7567cafcb309f96482b5081d14ac93ccd457f9dd48"}, ] [package.dependencies] exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} idna = ">=2.8" sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} +typing_extensions = {version = ">=4.5", markers = "python_version < \"3.13\""} [package.extras] -doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21.0b1)"] +doc = ["Sphinx (>=7.4,<8.0)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx_rtd_theme"] +test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "truststore (>=0.9.1)", "uvloop (>=0.21)"] trio = ["trio (>=0.26.1)"] [[package]] @@ -890,13 +890,13 @@ files = [ [[package]] name = "docling-core" -version = "2.7.0" +version = "2.7.1" description = "A python library to define and validate data types in Docling." optional = false python-versions = "<4.0,>=3.9" files = [ - {file = "docling_core-2.7.0-py3-none-any.whl", hash = "sha256:45cd51d7803587e779d49458399373eb399a599e52e2356bd358f63bd2559fa8"}, - {file = "docling_core-2.7.0.tar.gz", hash = "sha256:180a78cfd334b207f4984962f1f7a5d8e6f91734a9c7bd96d78bc9d19135f114"}, + {file = "docling_core-2.7.1-py3-none-any.whl", hash = "sha256:a3d3df9ed8755f98acfdcc8960e8d7b1eaf7dada9aded644e2487d43dc418ce5"}, + {file = "docling_core-2.7.1.tar.gz", hash = "sha256:563b4f3da2d7e4fd70ba4ce0e418e4898478f452d917665cdcd4cdde17befa55"}, ] [package.dependencies] @@ -3192,6 +3192,7 @@ files = [ {file = "nh3-0.2.19-cp38-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:00810cd5275f5c3f44b9eb0e521d1a841ee2f8023622de39ffc7d88bd533d8e0"}, {file = "nh3-0.2.19-cp38-abi3-win32.whl", hash = "sha256:7e98621856b0a911c21faa5eef8f8ea3e691526c2433f9afc2be713cb6fbdb48"}, {file = "nh3-0.2.19-cp38-abi3-win_amd64.whl", hash = "sha256:75c7cafb840f24430b009f7368945cb5ca88b2b54bb384ebfba495f16bc9c121"}, + {file = "nh3-0.2.19.tar.gz", hash = "sha256:790056b54c068ff8dceb443eaefb696b84beff58cca6c07afd754d17692a4804"}, ] [[package]] @@ -4340,22 +4341,22 @@ files = [ [[package]] name = "protobuf" -version = "5.29.0" +version = "5.29.1" description = "" optional = false python-versions = ">=3.8" files = [ - {file = "protobuf-5.29.0-cp310-abi3-win32.whl", hash = "sha256:ea7fb379b257911c8c020688d455e8f74efd2f734b72dc1ea4b4d7e9fd1326f2"}, - {file = "protobuf-5.29.0-cp310-abi3-win_amd64.whl", hash = "sha256:34a90cf30c908f47f40ebea7811f743d360e202b6f10d40c02529ebd84afc069"}, - {file = "protobuf-5.29.0-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:c931c61d0cc143a2e756b1e7f8197a508de5365efd40f83c907a9febf36e6b43"}, - {file = "protobuf-5.29.0-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:85286a47caf63b34fa92fdc1fd98b649a8895db595cfa746c5286eeae890a0b1"}, - {file = "protobuf-5.29.0-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:0d10091d6d03537c3f902279fcf11e95372bdd36a79556311da0487455791b20"}, - {file = "protobuf-5.29.0-cp38-cp38-win32.whl", hash = "sha256:0cd67a1e5c2d88930aa767f702773b2d054e29957432d7c6a18f8be02a07719a"}, - {file = "protobuf-5.29.0-cp38-cp38-win_amd64.whl", hash = "sha256:e467f81fdd12ded9655cea3e9b83dc319d93b394ce810b556fb0f421d8613e86"}, - {file = "protobuf-5.29.0-cp39-cp39-win32.whl", hash = "sha256:17d128eebbd5d8aee80300aed7a43a48a25170af3337f6f1333d1fac2c6839ac"}, - {file = "protobuf-5.29.0-cp39-cp39-win_amd64.whl", hash = "sha256:6c3009e22717c6cc9e6594bb11ef9f15f669b19957ad4087214d69e08a213368"}, - {file = "protobuf-5.29.0-py3-none-any.whl", hash = "sha256:88c4af76a73183e21061881360240c0cdd3c39d263b4e8fb570aaf83348d608f"}, - {file = "protobuf-5.29.0.tar.gz", hash = "sha256:445a0c02483869ed8513a585d80020d012c6dc60075f96fa0563a724987b1001"}, + {file = "protobuf-5.29.1-cp310-abi3-win32.whl", hash = "sha256:22c1f539024241ee545cbcb00ee160ad1877975690b16656ff87dde107b5f110"}, + {file = "protobuf-5.29.1-cp310-abi3-win_amd64.whl", hash = "sha256:1fc55267f086dd4050d18ef839d7bd69300d0d08c2a53ca7df3920cc271a3c34"}, + {file = "protobuf-5.29.1-cp38-abi3-macosx_10_9_universal2.whl", hash = "sha256:d473655e29c0c4bbf8b69e9a8fb54645bc289dead6d753b952e7aa660254ae18"}, + {file = "protobuf-5.29.1-cp38-abi3-manylinux2014_aarch64.whl", hash = "sha256:b5ba1d0e4c8a40ae0496d0e2ecfdbb82e1776928a205106d14ad6985a09ec155"}, + {file = "protobuf-5.29.1-cp38-abi3-manylinux2014_x86_64.whl", hash = "sha256:8ee1461b3af56145aca2800e6a3e2f928108c749ba8feccc6f5dd0062c410c0d"}, + {file = "protobuf-5.29.1-cp38-cp38-win32.whl", hash = "sha256:50879eb0eb1246e3a5eabbbe566b44b10348939b7cc1b267567e8c3d07213853"}, + {file = "protobuf-5.29.1-cp38-cp38-win_amd64.whl", hash = "sha256:027fbcc48cea65a6b17028510fdd054147057fa78f4772eb547b9274e5219331"}, + {file = "protobuf-5.29.1-cp39-cp39-win32.whl", hash = "sha256:5a41deccfa5e745cef5c65a560c76ec0ed8e70908a67cc8f4da5fce588b50d57"}, + {file = "protobuf-5.29.1-cp39-cp39-win_amd64.whl", hash = "sha256:012ce28d862ff417fd629285aca5d9772807f15ceb1a0dbd15b88f58c776c98c"}, + {file = "protobuf-5.29.1-py3-none-any.whl", hash = "sha256:32600ddb9c2a53dedc25b8581ea0f1fd8ea04956373c0c07577ce58d312522e0"}, + {file = "protobuf-5.29.1.tar.gz", hash = "sha256:683be02ca21a6ffe80db6dd02c0b5b2892322c59ca57fd6c872d652cb80549cb"}, ] [[package]] @@ -5708,114 +5709,114 @@ jupyter = ["ipywidgets (>=7.5.1,<9)"] [[package]] name = "rpds-py" -version = "0.22.1" +version = "0.22.3" description = "Python bindings to Rust's persistent data structures (rpds)" optional = false python-versions = ">=3.9" files = [ - {file = "rpds_py-0.22.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:ab27dd4edd84b13309f268ffcdfc07aef8339135ffab7b6d43f16884307a2a48"}, - {file = "rpds_py-0.22.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9d5b925156a746dc1f5f52376fdd1fbdd3f6ffe1fcd6f5e06f77ca79abb940a3"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:201650b309c419143775c15209c620627de3c09a27c7fb58375325aec5cce260"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:31264187fc934ff1024a4f56775f33c9252d3f4f3e27ec07d1995a26b52702c3"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:97c5ffe47ccf92d8b17e10f8a5ce28d015aa1196edc3359684cf31504eae6a14"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9ac7280bd045f472b50306d7efeee051b69e3a2dd1b90f46bd7e86e63b1efa2"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5f941fb86195f97be7f6efe04a21b223f05dfe4d1dfb159999e2f8d101e44cc4"}, - {file = "rpds_py-0.22.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f91bfc39f7a64168e08ab831fa497ec5438c1d6c6e2f9e12848d95ad11ac8523"}, - {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:effcae2152afe7937a28376dbabb25c770ef99ed4e16a4ffeb8e6a4f7c4f06aa"}, - {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:2177e59c033bf0d1bf7de1ced561205963583caf3242c6c700a723034bfb5f8e"}, - {file = "rpds_py-0.22.1-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:66f4f48a89cdd30ab3a47335df81c76e9a63799d0d84b29c0618371c66fa37b0"}, - {file = "rpds_py-0.22.1-cp310-cp310-win32.whl", hash = "sha256:b07fa9e634234e84096adfa4be3828c8f26e238679c122824b2b3d7131bec578"}, - {file = "rpds_py-0.22.1-cp310-cp310-win_amd64.whl", hash = "sha256:ca4657e9fd0b1b5376942d403d634ce188f79064f0873aa853ab05b10185ceec"}, - {file = "rpds_py-0.22.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:608c84699b2db09c6a8743845b1a3dad36fae53eaaecb241d45b13dff74405fb"}, - {file = "rpds_py-0.22.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:9dae4eb9b5534e09ba6c6ab496a757e5e394b7e7b08767d25ca37e8d36491114"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:09a1f000c5f6e08b298275bae00921e9fbbf2a35dae0a86db2821c058c2201a9"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:580ccbf11f02f948add4cb641843030a89f1463d7c0740cbfc9aca91e9dc34b3"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96559e05bdf938b2048353e10a7920b98f853cefe4482c2064a718d7d0a50bd7"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:128cbaed7ba26116820bcb992405d6a13ea18c8fca1b8c4f59906d858e91e979"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:734783dd7da58f76222f458346ddebdb3621686a1a2a667db5049caf0c9956b9"}, - {file = "rpds_py-0.22.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:c9ce6b83597d45bec44a2690857ede62fc98223772135f8a7fa90884eb726501"}, - {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:bca4428c4a957b78ded3e6e62884ab03f029dce8fa8d34818da0f80f61332b49"}, - {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:1ded65691a1d3fd7d2aa89d2c91aa51f941601bb2ce099739909034d957fef4b"}, - {file = "rpds_py-0.22.1-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:72407065ad459db9f3d052ea8c51e02534f02533fc61e51cbab3bd94166f086c"}, - {file = "rpds_py-0.22.1-cp311-cp311-win32.whl", hash = "sha256:eb013aa01b404219f28dc973d9e6310fd4db216d7299253dd355629952e0564e"}, - {file = "rpds_py-0.22.1-cp311-cp311-win_amd64.whl", hash = "sha256:8bd9ec1db79a664f4cbb12878693b73416f4d2cb425d3e27eccc1bdfbdc826ef"}, - {file = "rpds_py-0.22.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:8ec41049c90d204a6561238a9ad6c7263ebb7009d9759c98b58078d9d2fec9ba"}, - {file = "rpds_py-0.22.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:102be79c4cc47a4aeb5912401185c404cd2601c15a7163bbecff7f1bfe20b669"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8a603155db408f773637f9e3a712c6e3cbc521aaa8fa2b99f9ba6106c59a2496"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5dbff9402c2bdf00bf0df9905694b3c292a3847c725651938a72f554351a5fcb"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:96b3759d8ab2323324e0a92b2f44834f9d88089b8d1ab6f533b61f4be3411cef"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c3029f481b31f329b1fdb4ec4b56935d82210ddd9c6f86ea5a87c06f1e97b161"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d280b4bf09f719b89fd9aab3b71067acc0d0449b7d1eba99a2ade4939cef8296"}, - {file = "rpds_py-0.22.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:6c8e97e19aa7b0b0d801a159f932ce4435f1049c8c38e2bb372bb5bee559ce50"}, - {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:50e4b5d291105f7063259fe0125b1af902fb34499444d7c5c521dd8328b00939"}, - {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:d3777c446bb1c5fcd82dc3f8776e1a146cd91e80cc1892f8634575ace438d22f"}, - {file = "rpds_py-0.22.1-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:447ae1104fb32197b9262f772d565d38e834cc2e9edd89350b37b88fed636e70"}, - {file = "rpds_py-0.22.1-cp312-cp312-win32.whl", hash = "sha256:55d371b9d8b0c2a68a50413a8cb01c3c3ce1ea4f768bf77b66669a9a486e101e"}, - {file = "rpds_py-0.22.1-cp312-cp312-win_amd64.whl", hash = "sha256:413a30a99d8683dace3765885920ed27ab662efbb6c98d81db76c397ad1ffd71"}, - {file = "rpds_py-0.22.1-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:aa2ba0176037c915d8660a4e46581d645e2c22b5373e466bc8640a794d45861a"}, - {file = "rpds_py-0.22.1-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:4ba6c66fbc6015b2f99e7176fec41793cecb00c4cc357cad038dff85e6ac42ab"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:15fa4ca658f8ad22645d3531682b17e5580832efbfa87304c3e62214c79c1e8a"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d7833ef6f5d6cb634f296abfd93452fb3eb44c4e9a6ae95c1021eab704c1cee2"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c0467838c90435b80793cde486a318fc916ee57f2af54e4b10c72b20cbdcbaa9"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d962e2e89b3a95e3597a34b8c93ced1e98958502c5b8096c9fd69deff279f561"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8ce729f1dc8a4a190c34b69f75377bddc004079b2963ab722ab91fafe040be6d"}, - {file = "rpds_py-0.22.1-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:8080467df22feca0fc9c46567001777c6fbc2b4a2683a7137420896051874ca1"}, - {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:0f9eb37d3a60b262a98ab51ee899cac039de9ca0ce68dcf1a6518a09719020b0"}, - {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:153248f48d6f90a295a502f53ec544a3ffbd21b0bb32f5dca39c4b93a764d6a2"}, - {file = "rpds_py-0.22.1-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:0a53592cdf98cec3dfcdb24ffec8a4797e7656b65700099af43ec7df023b6de4"}, - {file = "rpds_py-0.22.1-cp313-cp313-win32.whl", hash = "sha256:e8056adcefa2dcb67e8bc91ea5eee26df66e8b297a8cd6ff0903f85c70908fa0"}, - {file = "rpds_py-0.22.1-cp313-cp313-win_amd64.whl", hash = "sha256:a451dba533be77454ebcffc85189108fc05f279100835ac76e7989edacb89156"}, - {file = "rpds_py-0.22.1-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:2ea23f1525d4f64286dbe0947c929d45c3ffe963b2dbed1d3844a2e4938bda42"}, - {file = "rpds_py-0.22.1-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3aaa22487477de9618ce3b37f99fbe81219ba96f3c2ca84f576f0ab451b83aba"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8954b9ffe60f479a0c0ba40987db2546c735ab02a725ea7fd89342152d4d821d"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c8502a02ae3ae67084f5a0bf5a8253b19fa7a887f824e41e016cdb0ac532a06f"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a083221b6a4ecdef38a60c95d8d3223d99449cb4da2544e9644958dc16664eb9"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:542eb246d5be31b5e0a9c8ddb9539416f9b31f58f75bd4ee328bff2b5c58d6fd"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ffae97d28ea4f2c613a751d087b75a97fb78311b38cc2e9a2f4587e473ace167"}, - {file = "rpds_py-0.22.1-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:d0ff8d5b13ce2357fa8b33a0a2e3775aa71df5bf7c8ba060634c9d15ab12f357"}, - {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:0f057a0c546c42964836b209d8de9ea1a4f4b0432006c6343cbe633d8ca14571"}, - {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:48ee97c7c6027fd423058675b5a39d0b5f7a1648250b671563d5c9f74ff13ff0"}, - {file = "rpds_py-0.22.1-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:babec324e8654a59122aaa66936a9a483faa03276db9792f51332475c2dddc4a"}, - {file = "rpds_py-0.22.1-cp313-cp313t-win32.whl", hash = "sha256:e69acdbc132c9592c8dc393af85e38e206ca847c7019a953ff625191c3a12312"}, - {file = "rpds_py-0.22.1-cp313-cp313t-win_amd64.whl", hash = "sha256:c783e4ed68200f4e03c125690d23158b1c49c4b186d458a18debc109bbdc3c2e"}, - {file = "rpds_py-0.22.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:2143c3aed85992604d758bbe67da839fb4aab3dd2e1c6dddab5b3ca7162b34a2"}, - {file = "rpds_py-0.22.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f57e2d0f8022783426121b586d7c842ea40ea832a29e28ca36c881b54c74fb28"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c0c324879d483504b07f7b18eb1b50567c434263bbe4866ecce33056162668a"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1c40e02cc4f3e18fd39344edb10eebe04bd11cfd13119606b5771e5ea51630d3"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f76c6f319e57007ad52e671ec741d801324760a377e3d4992c9bb8200333ebac"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5cae9b415ea8a6a563566dbf46650222eccc5971c7daa16fbee63aef92ae543"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b09209cdfcacf5eba9cf80367130532e6c02e695252e1f64d3cfcc2356e6e19f"}, - {file = "rpds_py-0.22.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:dbe428d0ac6eacaf05402adbaf137f59ad6063848182d1ff294f95ce0f24005b"}, - {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:626b9feb01bff049a5aec4804f0c58db12585778b4902e5376a95b01f80a7a16"}, - {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:ec1ccc2a9f764cd632fb8ab28fdde166250df54fc8d97315a4a6948dc5367639"}, - {file = "rpds_py-0.22.1-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:ef92b1fbe6aa2e7885eb90853cc016b1fc95439a8cc8da6d526880e9e2148695"}, - {file = "rpds_py-0.22.1-cp39-cp39-win32.whl", hash = "sha256:c88535f83f7391cf3a45af990237e3939a6fdfbedaed2571633bfdd0bceb36b0"}, - {file = "rpds_py-0.22.1-cp39-cp39-win_amd64.whl", hash = "sha256:7839b7528faa4d134c183b1f2dd1ee4dc2ca2f899f4f0cfdf00fc04c255262a7"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a0ed14a4162c2c2b21a162c9fcf90057e3e7da18cd171ab344c1e1664f75090e"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:05fdeae9010533e47715c37df83264df0122584e40d691d50cf3607c060952a3"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4659b2e4a5008715099e216050f5c6976e5a4329482664411789968b82e3f17d"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:a18aedc032d6468b73ebbe4437129cb30d54fe543cde2f23671ecad76c3aea24"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:149b4d875ef9b12a8f5e303e86a32a58f8ef627e57ec97a7d0e4be819069d141"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fdaee3947eaaa52dae3ceb9d9f66329e13d8bae35682b1e5dd54612938693934"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:36ce951800ed2acc6772fd9f42150f29d567f0423989748052fdb39d9e2b5795"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:ab784621d3e2a41916e21f13a483602cc989fd45fff637634b9231ba43d4383b"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:c2a214bf5b79bd39a9de1c991353aaaacafda83ba1374178309e92be8e67d411"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:85060e96953647871957d41707adb8d7bff4e977042fd0deb4fc1881b98dd2fe"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:c6f3fd617db422c9d4e12cb8d84c984fe07d6d9cb0950cbf117f3bccc6268d05"}, - {file = "rpds_py-0.22.1-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:f2d1b58a0c3a73f0361759642e80260a6d28eee6501b40fe25b82af33ef83f21"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:76eaa4c087a061a2c8a0a92536405069878a8f530c00e84a9eaf332e70f5561f"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:959ae04ed30cde606f3a0320f0a1f4167a107e685ef5209cce28c5080590bd31"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:198067aa6f3d942ff5d0d655bb1e91b59ae85279d47590682cba2834ac1b97d2"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:3e7e99e2af59c56c59b6c964d612511b8203480d39d1ef83edc56f2cb42a3f5d"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0545928bdf53dfdfcab284468212efefb8a6608ca3b6910c7fb2e5ed8bdc2dc0"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ef7282d8a14b60dd515e47060638687710b1d518f4b5e961caad43fb3a3606f9"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe3f245c2f39a5692d9123c174bc48f6f9fe3e96407e67c6d04541a767d99e72"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:efb2ad60ca8637d5f9f653f9a9a8d73964059972b6b95036be77e028bffc68a3"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:d8306f27418361b788e3fca9f47dec125457f80122e7e31ba7ff5cdba98343f8"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:4c8dc7331e8cbb1c0ea2bcb550adb1777365944ffd125c69aa1117fdef4887f5"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:776a06cb5720556a549829896a49acebb5bdd96c7bba100191a994053546975a"}, - {file = "rpds_py-0.22.1-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:e4f91d702b9ce1388660b3d4a28aa552614a1399e93f718ed0dacd68f23b3d32"}, - {file = "rpds_py-0.22.1.tar.gz", hash = "sha256:157a023bded0618a1eea54979fe2e0f9309e9ddc818ef4b8fc3b884ff38fedd5"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:6c7b99ca52c2c1752b544e310101b98a659b720b21db00e65edca34483259967"}, + {file = "rpds_py-0.22.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:be2eb3f2495ba669d2a985f9b426c1797b7d48d6963899276d22f23e33d47e37"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:70eb60b3ae9245ddea20f8a4190bd79c705a22f8028aaf8bbdebe4716c3fab24"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:4041711832360a9b75cfb11b25a6a97c8fb49c07b8bd43d0d02b45d0b499a4ff"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:64607d4cbf1b7e3c3c8a14948b99345eda0e161b852e122c6bb71aab6d1d798c"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e69b0a0e2537f26d73b4e43ad7bc8c8efb39621639b4434b76a3de50c6966e"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc27863442d388870c1809a87507727b799c8460573cfbb6dc0eeaef5a11b5ec"}, + {file = "rpds_py-0.22.3-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:e79dd39f1e8c3504be0607e5fc6e86bb60fe3584bec8b782578c3b0fde8d932c"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_aarch64.whl", hash = "sha256:e0fa2d4ec53dc51cf7d3bb22e0aa0143966119f42a0c3e4998293a3dd2856b09"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_i686.whl", hash = "sha256:fda7cb070f442bf80b642cd56483b5548e43d366fe3f39b98e67cce780cded00"}, + {file = "rpds_py-0.22.3-cp310-cp310-musllinux_1_2_x86_64.whl", hash = "sha256:cff63a0272fcd259dcc3be1657b07c929c466b067ceb1c20060e8d10af56f5bf"}, + {file = "rpds_py-0.22.3-cp310-cp310-win32.whl", hash = "sha256:9bd7228827ec7bb817089e2eb301d907c0d9827a9e558f22f762bb690b131652"}, + {file = "rpds_py-0.22.3-cp310-cp310-win_amd64.whl", hash = "sha256:9beeb01d8c190d7581a4d59522cd3d4b6887040dcfc744af99aa59fef3e041a8"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:d20cfb4e099748ea39e6f7b16c91ab057989712d31761d3300d43134e26e165f"}, + {file = "rpds_py-0.22.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:68049202f67380ff9aa52f12e92b1c30115f32e6895cd7198fa2a7961621fc5a"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb4f868f712b2dd4bcc538b0a0c1f63a2b1d584c925e69a224d759e7070a12d5"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bc51abd01f08117283c5ebf64844a35144a0843ff7b2983e0648e4d3d9f10dbb"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:0f3cec041684de9a4684b1572fe28c7267410e02450f4561700ca5a3bc6695a2"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7ef9d9da710be50ff6809fed8f1963fecdfecc8b86656cadfca3bc24289414b0"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:59f4a79c19232a5774aee369a0c296712ad0e77f24e62cad53160312b1c1eaa1"}, + {file = "rpds_py-0.22.3-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1a60bce91f81ddaac922a40bbb571a12c1070cb20ebd6d49c48e0b101d87300d"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_aarch64.whl", hash = "sha256:e89391e6d60251560f0a8f4bd32137b077a80d9b7dbe6d5cab1cd80d2746f648"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_i686.whl", hash = "sha256:e3fb866d9932a3d7d0c82da76d816996d1667c44891bd861a0f97ba27e84fc74"}, + {file = "rpds_py-0.22.3-cp311-cp311-musllinux_1_2_x86_64.whl", hash = "sha256:1352ae4f7c717ae8cba93421a63373e582d19d55d2ee2cbb184344c82d2ae55a"}, + {file = "rpds_py-0.22.3-cp311-cp311-win32.whl", hash = "sha256:b0b4136a252cadfa1adb705bb81524eee47d9f6aab4f2ee4fa1e9d3cd4581f64"}, + {file = "rpds_py-0.22.3-cp311-cp311-win_amd64.whl", hash = "sha256:8bd7c8cfc0b8247c8799080fbff54e0b9619e17cdfeb0478ba7295d43f635d7c"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:27e98004595899949bd7a7b34e91fa7c44d7a97c40fcaf1d874168bb652ec67e"}, + {file = "rpds_py-0.22.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:1978d0021e943aae58b9b0b196fb4895a25cc53d3956b8e35e0b7682eefb6d56"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:655ca44a831ecb238d124e0402d98f6212ac527a0ba6c55ca26f616604e60a45"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:feea821ee2a9273771bae61194004ee2fc33f8ec7db08117ef9147d4bbcbca8e"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:22bebe05a9ffc70ebfa127efbc429bc26ec9e9b4ee4d15a740033efda515cf3d"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3af6e48651c4e0d2d166dc1b033b7042ea3f871504b6805ba5f4fe31581d8d38"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e67ba3c290821343c192f7eae1d8fd5999ca2dc99994114643e2f2d3e6138b15"}, + {file = "rpds_py-0.22.3-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:02fbb9c288ae08bcb34fb41d516d5eeb0455ac35b5512d03181d755d80810059"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_aarch64.whl", hash = "sha256:f56a6b404f74ab372da986d240e2e002769a7d7102cc73eb238a4f72eec5284e"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_i686.whl", hash = "sha256:0a0461200769ab3b9ab7e513f6013b7a97fdeee41c29b9db343f3c5a8e2b9e61"}, + {file = "rpds_py-0.22.3-cp312-cp312-musllinux_1_2_x86_64.whl", hash = "sha256:8633e471c6207a039eff6aa116e35f69f3156b3989ea3e2d755f7bc41754a4a7"}, + {file = "rpds_py-0.22.3-cp312-cp312-win32.whl", hash = "sha256:593eba61ba0c3baae5bc9be2f5232430453fb4432048de28399ca7376de9c627"}, + {file = "rpds_py-0.22.3-cp312-cp312-win_amd64.whl", hash = "sha256:d115bffdd417c6d806ea9069237a4ae02f513b778e3789a359bc5856e0404cc4"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:ea7433ce7e4bfc3a85654aeb6747babe3f66eaf9a1d0c1e7a4435bbdf27fea84"}, + {file = "rpds_py-0.22.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:6dd9412824c4ce1aca56c47b0991e65bebb7ac3f4edccfd3f156150c96a7bf25"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20070c65396f7373f5df4005862fa162db5d25d56150bddd0b3e8214e8ef45b4"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:0b09865a9abc0ddff4e50b5ef65467cd94176bf1e0004184eb915cbc10fc05c5"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:3453e8d41fe5f17d1f8e9c383a7473cd46a63661628ec58e07777c2fff7196dc"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f5d36399a1b96e1a5fdc91e0522544580dbebeb1f77f27b2b0ab25559e103b8b"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:009de23c9c9ee54bf11303a966edf4d9087cd43a6003672e6aa7def643d06518"}, + {file = "rpds_py-0.22.3-cp313-cp313-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:1aef18820ef3e4587ebe8b3bc9ba6e55892a6d7b93bac6d29d9f631a3b4befbd"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_aarch64.whl", hash = "sha256:f60bd8423be1d9d833f230fdbccf8f57af322d96bcad6599e5a771b151398eb2"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_i686.whl", hash = "sha256:62d9cfcf4948683a18a9aff0ab7e1474d407b7bab2ca03116109f8464698ab16"}, + {file = "rpds_py-0.22.3-cp313-cp313-musllinux_1_2_x86_64.whl", hash = "sha256:9253fc214112405f0afa7db88739294295f0e08466987f1d70e29930262b4c8f"}, + {file = "rpds_py-0.22.3-cp313-cp313-win32.whl", hash = "sha256:fb0ba113b4983beac1a2eb16faffd76cb41e176bf58c4afe3e14b9c681f702de"}, + {file = "rpds_py-0.22.3-cp313-cp313-win_amd64.whl", hash = "sha256:c58e2339def52ef6b71b8f36d13c3688ea23fa093353f3a4fee2556e62086ec9"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_10_12_x86_64.whl", hash = "sha256:f82a116a1d03628a8ace4859556fb39fd1424c933341a08ea3ed6de1edb0283b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-macosx_11_0_arm64.whl", hash = "sha256:3dfcbc95bd7992b16f3f7ba05af8a64ca694331bd24f9157b49dadeeb287493b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:59259dc58e57b10e7e18ce02c311804c10c5a793e6568f8af4dead03264584d1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5725dd9cc02068996d4438d397e255dcb1df776b7ceea3b9cb972bdb11260a83"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:99b37292234e61325e7a5bb9689e55e48c3f5f603af88b1642666277a81f1fbd"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:27b1d3b3915a99208fee9ab092b8184c420f2905b7d7feb4aeb5e4a9c509b8a1"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f612463ac081803f243ff13cccc648578e2279295048f2a8d5eb430af2bae6e3"}, + {file = "rpds_py-0.22.3-cp313-cp313t-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f73d3fef726b3243a811121de45193c0ca75f6407fe66f3f4e183c983573e130"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_aarch64.whl", hash = "sha256:3f21f0495edea7fdbaaa87e633a8689cd285f8f4af5c869f27bc8074638ad69c"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_i686.whl", hash = "sha256:1e9663daaf7a63ceccbbb8e3808fe90415b0757e2abddbfc2e06c857bf8c5e2b"}, + {file = "rpds_py-0.22.3-cp313-cp313t-musllinux_1_2_x86_64.whl", hash = "sha256:a76e42402542b1fae59798fab64432b2d015ab9d0c8c47ba7addddbaf7952333"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win32.whl", hash = "sha256:69803198097467ee7282750acb507fba35ca22cc3b85f16cf45fb01cb9097730"}, + {file = "rpds_py-0.22.3-cp313-cp313t-win_amd64.whl", hash = "sha256:f5cf2a0c2bdadf3791b5c205d55a37a54025c6e18a71c71f82bb536cf9a454bf"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:378753b4a4de2a7b34063d6f95ae81bfa7b15f2c1a04a9518e8644e81807ebea"}, + {file = "rpds_py-0.22.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:3445e07bf2e8ecfeef6ef67ac83de670358abf2996916039b16a218e3d95e97e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b2513ba235829860b13faa931f3b6846548021846ac808455301c23a101689d"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:eaf16ae9ae519a0e237a0f528fd9f0197b9bb70f40263ee57ae53c2b8d48aeb3"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:583f6a1993ca3369e0f80ba99d796d8e6b1a3a2a442dd4e1a79e652116413091"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4617e1915a539a0d9a9567795023de41a87106522ff83fbfaf1f6baf8e85437e"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0c150c7a61ed4a4f4955a96626574e9baf1adf772c2fb61ef6a5027e52803543"}, + {file = "rpds_py-0.22.3-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2fa4331c200c2521512595253f5bb70858b90f750d39b8cbfd67465f8d1b596d"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_aarch64.whl", hash = "sha256:214b7a953d73b5e87f0ebece4a32a5bd83c60a3ecc9d4ec8f1dca968a2d91e99"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_i686.whl", hash = "sha256:f47ad3d5f3258bd7058d2d506852217865afefe6153a36eb4b6928758041d831"}, + {file = "rpds_py-0.22.3-cp39-cp39-musllinux_1_2_x86_64.whl", hash = "sha256:f276b245347e6e36526cbd4a266a417796fc531ddf391e43574cf6466c492520"}, + {file = "rpds_py-0.22.3-cp39-cp39-win32.whl", hash = "sha256:bbb232860e3d03d544bc03ac57855cd82ddf19c7a07651a7c0fdb95e9efea8b9"}, + {file = "rpds_py-0.22.3-cp39-cp39-win_amd64.whl", hash = "sha256:cfbc454a2880389dbb9b5b398e50d439e2e58669160f27b60e5eca11f68ae17c"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:d48424e39c2611ee1b84ad0f44fb3b2b53d473e65de061e3f460fc0be5f1939d"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:24e8abb5878e250f2eb0d7859a8e561846f98910326d06c0d51381fed59357bd"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b232061ca880db21fa14defe219840ad9b74b6158adb52ddf0e87bead9e8493"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac0a03221cdb5058ce0167ecc92a8c89e8d0decdc9e99a2ec23380793c4dcb96"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:eb0c341fa71df5a4595f9501df4ac5abfb5a09580081dffbd1ddd4654e6e9123"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bf9db5488121b596dbfc6718c76092fda77b703c1f7533a226a5a9f65248f8ad"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0b8db6b5b2d4491ad5b6bdc2bc7c017eec108acbf4e6785f42a9eb0ba234f4c9"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b3d504047aba448d70cf6fa22e06cb09f7cbd761939fdd47604f5e007675c24e"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:e61b02c3f7a1e0b75e20c3978f7135fd13cb6cf551bf4a6d29b999a88830a338"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_i686.whl", hash = "sha256:e35ba67d65d49080e8e5a1dd40101fccdd9798adb9b050ff670b7d74fa41c566"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:26fd7cac7dd51011a245f29a2cc6489c4608b5a8ce8d75661bb4a1066c52dfbe"}, + {file = "rpds_py-0.22.3-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:177c7c0fce2855833819c98e43c262007f42ce86651ffbb84f37883308cb0e7d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:bb47271f60660803ad11f4c61b42242b8c1312a31c98c578f79ef9387bbde21c"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:70fb28128acbfd264eda9bf47015537ba3fe86e40d046eb2963d75024be4d055"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:44d61b4b7d0c2c9ac019c314e52d7cbda0ae31078aabd0f22e583af3e0d79723"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5f0e260eaf54380380ac3808aa4ebe2d8ca28b9087cf411649f96bad6900c728"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b25bc607423935079e05619d7de556c91fb6adeae9d5f80868dde3468657994b"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fb6116dfb8d1925cbdb52595560584db42a7f664617a1f7d7f6e32f138cdf37d"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a63cbdd98acef6570c62b92a1e43266f9e8b21e699c363c0fef13bd530799c11"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2b8f60e1b739a74bab7e01fcbe3dddd4657ec685caa04681df9d562ef15b625f"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_aarch64.whl", hash = "sha256:2e8b55d8517a2fda8d95cb45d62a5a8bbf9dd0ad39c5b25c8833efea07b880ca"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_i686.whl", hash = "sha256:2de29005e11637e7a2361fa151f780ff8eb2543a0da1413bb951e9f14b699ef3"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-musllinux_1_2_x86_64.whl", hash = "sha256:666ecce376999bf619756a24ce15bb14c5bfaf04bf00abc7e663ce17c3f34fe7"}, + {file = "rpds_py-0.22.3-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:5246b14ca64a8675e0a7161f7af68fe3e910e6b90542b4bfb5439ba752191df6"}, + {file = "rpds_py-0.22.3.tar.gz", hash = "sha256:e32fee8ab45d3c2db6da19a5323bc3362237c8b653c70194414b892fd06a080d"}, ] [[package]] @@ -6248,13 +6249,13 @@ files = [ [[package]] name = "six" -version = "1.16.0" +version = "1.17.0" description = "Python 2 and 3 compatibility utilities" optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*" +python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,>=2.7" files = [ - {file = "six-1.16.0-py2.py3-none-any.whl", hash = "sha256:8abb2f1d86890a2dfb989f9a77cfcfd3e47c2a354b01111771326f8aa26e0254"}, - {file = "six-1.16.0.tar.gz", hash = "sha256:1e61c37477a1626458e36f7b1d82aa5c9b094fa4802892072e49de9c60c4c926"}, + {file = "six-1.17.0-py2.py3-none-any.whl", hash = "sha256:4721f391ed90541fddacab5acf947aa0d3dc7d27b2e1e8eda2be8970586c3274"}, + {file = "six-1.17.0.tar.gz", hash = "sha256:ff70335d468e7eb6ec65b95b99d3a2836546063f63acc5171de367e834932a81"}, ] [[package]] @@ -6471,123 +6472,26 @@ files = [ [[package]] name = "tokenizers" -version = "0.20.3" +version = "0.21.0" description = "" optional = false python-versions = ">=3.7" files = [ - {file = "tokenizers-0.20.3-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:31ccab28dbb1a9fe539787210b0026e22debeab1662970f61c2d921f7557f7e4"}, - {file = "tokenizers-0.20.3-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c6361191f762bda98c773da418cf511cbaa0cb8d0a1196f16f8c0119bde68ff8"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f128d5da1202b78fa0a10d8d938610472487da01b57098d48f7e944384362514"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:79c4121a2e9433ad7ef0769b9ca1f7dd7fa4c0cd501763d0a030afcbc6384481"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b7850fde24197fe5cd6556e2fdba53a6d3bae67c531ea33a3d7c420b90904141"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b357970c095dc134978a68c67d845a1e3803ab7c4fbb39195bde914e7e13cf8b"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a333d878c4970b72d6c07848b90c05f6b045cf9273fc2bc04a27211721ad6118"}, - {file = "tokenizers-0.20.3-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1fd9fee817f655a8f50049f685e224828abfadd436b8ff67979fc1d054b435f1"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:9e7816808b402129393a435ea2a509679b41246175d6e5e9f25b8692bfaa272b"}, - {file = "tokenizers-0.20.3-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ba96367db9d8a730d3a1d5996b4b7babb846c3994b8ef14008cd8660f55db59d"}, - {file = "tokenizers-0.20.3-cp310-none-win32.whl", hash = "sha256:ee31ba9d7df6a98619426283e80c6359f167e2e9882d9ce1b0254937dbd32f3f"}, - {file = "tokenizers-0.20.3-cp310-none-win_amd64.whl", hash = "sha256:a845c08fdad554fe0871d1255df85772f91236e5fd6b9287ef8b64f5807dbd0c"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:585b51e06ca1f4839ce7759941e66766d7b060dccfdc57c4ca1e5b9a33013a90"}, - {file = "tokenizers-0.20.3-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:61cbf11954f3b481d08723ebd048ba4b11e582986f9be74d2c3bdd9293a4538d"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ef820880d5e4e8484e2fa54ff8d297bb32519eaa7815694dc835ace9130a3eea"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:67ef4dcb8841a4988cd00dd288fb95dfc8e22ed021f01f37348fd51c2b055ba9"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ff1ef8bd47a02b0dc191688ccb4da53600df5d4c9a05a4b68e1e3de4823e78eb"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:444d188186eab3148baf0615b522461b41b1f0cd58cd57b862ec94b6ac9780f1"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:37c04c032c1442740b2c2d925f1857885c07619224a533123ac7ea71ca5713da"}, - {file = "tokenizers-0.20.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:453c7769d22231960ee0e883d1005c93c68015025a5e4ae56275406d94a3c907"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4bb31f7b2847e439766aaa9cc7bccf7ac7088052deccdb2275c952d96f691c6a"}, - {file = "tokenizers-0.20.3-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:843729bf0f991b29655a069a2ff58a4c24375a553c70955e15e37a90dd4e045c"}, - {file = "tokenizers-0.20.3-cp311-none-win32.whl", hash = "sha256:efcce3a927b1e20ca694ba13f7a68c59b0bd859ef71e441db68ee42cf20c2442"}, - {file = "tokenizers-0.20.3-cp311-none-win_amd64.whl", hash = "sha256:88301aa0801f225725b6df5dea3d77c80365ff2362ca7e252583f2b4809c4cc0"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:49d12a32e190fad0e79e5bdb788d05da2f20d8e006b13a70859ac47fecf6ab2f"}, - {file = "tokenizers-0.20.3-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:282848cacfb9c06d5e51489f38ec5aa0b3cd1e247a023061945f71f41d949d73"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:abe4e08c7d0cd6154c795deb5bf81d2122f36daf075e0c12a8b050d824ef0a64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ca94fc1b73b3883c98f0c88c77700b13d55b49f1071dfd57df2b06f3ff7afd64"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ef279c7e239f95c8bdd6ff319d9870f30f0d24915b04895f55b1adcf96d6c60d"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:16384073973f6ccbde9852157a4fdfe632bb65208139c9d0c0bd0176a71fd67f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:312d522caeb8a1a42ebdec87118d99b22667782b67898a76c963c058a7e41d4f"}, - {file = "tokenizers-0.20.3-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f2b7cb962564785a83dafbba0144ecb7f579f1d57d8c406cdaa7f32fe32f18ad"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:124c5882ebb88dadae1fc788a582299fcd3a8bd84fc3e260b9918cf28b8751f5"}, - {file = "tokenizers-0.20.3-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2b6e54e71f84c4202111a489879005cb14b92616a87417f6c102c833af961ea2"}, - {file = "tokenizers-0.20.3-cp312-none-win32.whl", hash = "sha256:83d9bfbe9af86f2d9df4833c22e94d94750f1d0cd9bfb22a7bb90a86f61cdb1c"}, - {file = "tokenizers-0.20.3-cp312-none-win_amd64.whl", hash = "sha256:44def74cee574d609a36e17c8914311d1b5dbcfe37c55fd29369d42591b91cf2"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_10_12_x86_64.whl", hash = "sha256:e0b630e0b536ef0e3c8b42c685c1bc93bd19e98c0f1543db52911f8ede42cf84"}, - {file = "tokenizers-0.20.3-cp313-cp313-macosx_11_0_arm64.whl", hash = "sha256:a02d160d2b19bcbfdf28bd9a4bf11be4cb97d0499c000d95d4c4b1a4312740b6"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0e3d80d89b068bc30034034b5319218c7c0a91b00af19679833f55f3becb6945"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:174a54910bed1b089226512b4458ea60d6d6fd93060254734d3bc3540953c51c"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:098b8a632b8656aa5802c46689462c5c48f02510f24029d71c208ec2c822e771"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:78c8c143e3ae41e718588281eb3e212c2b31623c9d6d40410ec464d7d6221fb5"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2b26b0aadb18cd8701077362ba359a06683662d5cafe3e8e8aba10eb05c037f1"}, - {file = "tokenizers-0.20.3-cp313-cp313-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:07d7851a72717321022f3774e84aa9d595a041d643fafa2e87fbc9b18711dac0"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_aarch64.whl", hash = "sha256:bd44e48a430ada902c6266a8245f5036c4fe744fcb51f699999fbe82aa438797"}, - {file = "tokenizers-0.20.3-cp313-cp313-musllinux_1_1_x86_64.whl", hash = "sha256:a4c186bb006ccbe1f5cc4e0380d1ce7806f5955c244074fd96abc55e27b77f01"}, - {file = "tokenizers-0.20.3-cp313-none-win32.whl", hash = "sha256:6e19e0f1d854d6ab7ea0c743d06e764d1d9a546932be0a67f33087645f00fe13"}, - {file = "tokenizers-0.20.3-cp313-none-win_amd64.whl", hash = "sha256:d50ede425c7e60966a9680d41b58b3a0950afa1bb570488e2972fa61662c4273"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:9adda1ff5fb9dcdf899ceca672a4e2ce9e797adb512a6467305ca3d8bfcfbdd0"}, - {file = "tokenizers-0.20.3-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:6dde2cae6004ba7a3badff4a11911cae03ebf23e97eebfc0e71fef2530e5074f"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c4a7fd678b35614fca708579eb95b7587a5e8a6d328171bd2488fd9f27d82be4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:1b80e3c7283a01a356bd2210f53d1a4a5d32b269c2024389ed0173137708d50e"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a8cc0e8176b762973758a77f0d9c4467d310e33165fb74173418ca3734944da4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d5634b2e2f5f3d2b4439d2d74066e22eb4b1f04f3fea05cb2a3c12d89b5a3bcd"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b4ba635165bc1ea46f2da8e5d80b5f70f6ec42161e38d96dbef33bb39df73964"}, - {file = "tokenizers-0.20.3-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:18e4c7c64172e7789bd8b07aa3087ea87c4c4de7e90937a2aa036b5d92332536"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:1f74909ef7675c26d4095a817ec3393d67f3158ca4836c233212e5613ef640c4"}, - {file = "tokenizers-0.20.3-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:0e9b81321a1e05b16487d312b4264984513f8b4a7556229cafac6e88c2036b09"}, - {file = "tokenizers-0.20.3-cp37-none-win32.whl", hash = "sha256:ab48184cd58b4a03022a2ec75b54c9f600ffea9a733612c02325ed636f353729"}, - {file = "tokenizers-0.20.3-cp37-none-win_amd64.whl", hash = "sha256:60ac483cebee1c12c71878523e768df02fa17e4c54412966cb3ac862c91b36c1"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:3229ef103c89583d10b9378afa5d601b91e6337530a0988e17ca8d635329a996"}, - {file = "tokenizers-0.20.3-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:6ac52cc24bad3de865c7e65b1c4e7b70d00938a8ae09a92a453b8f676e714ad5"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:04627b7b502fa6a2a005e1bd446fa4247d89abcb1afaa1b81eb90e21aba9a60f"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c27ceb887f0e81a3c377eb4605dca7a95a81262761c0fba308d627b2abb98f2b"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:65ab780194da4e1fcf5670523a2f377c4838ebf5249efe41fa1eddd2a84fb49d"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:98d343134f47159e81f7f242264b0eb222e6b802f37173c8d7d7b64d5c9d1388"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:f2475bb004ab2009d29aff13b5047bfdb3d4b474f0aa9d4faa13a7f34dbbbb43"}, - {file = "tokenizers-0.20.3-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7b6583a65c01db1197c1eb36857ceba8ec329d53afadd268b42a6b04f4965724"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:62d00ba208358c037eeab7bfc00a905adc67b2d31b68ab40ed09d75881e114ea"}, - {file = "tokenizers-0.20.3-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:0fc7a39e5bedc817bda395a798dfe2d9c5f7c71153c90d381b5135a0328d9520"}, - {file = "tokenizers-0.20.3-cp38-none-win32.whl", hash = "sha256:84d40ee0f8550d64d3ea92dd7d24a8557a9172165bdb986c9fb2503b4fe4e3b6"}, - {file = "tokenizers-0.20.3-cp38-none-win_amd64.whl", hash = "sha256:205a45246ed7f1718cf3785cff88450ba603352412aaf220ace026384aa3f1c0"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:93e37f0269a11dc3b1a953f1fca9707f0929ebf8b4063c591c71a0664219988e"}, - {file = "tokenizers-0.20.3-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f4cb0c614b0135e781de96c2af87e73da0389ac1458e2a97562ed26e29490d8d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7eb2fb1c432f5746b22f8a7f09fc18c4156cb0031c77f53cb19379d82d43297a"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:bfa8d029bb156181b006643309d6b673615a24e4ed24cf03aa191d599b996f51"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6f90549622de3bf476ad9f1dd6f3f952ec3ed6ab8615ae88ef060d0c5bfad55d"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a1d469c74eebf5c43fd61cd9b030e271d17198edd7bd45392e03a3c091d7d6d4"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:bee8f53b2594749f4460d53253bae55d718f04e9b633efa0f5df8938bd98e4f0"}, - {file = "tokenizers-0.20.3-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:938441babf3e5720e4459e306ef2809fb267680df9d1ff2873458b22aef60248"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7310ab23d7b0caebecc0e8be11a1146f320f5f07284000f6ea54793e83de1b75"}, - {file = "tokenizers-0.20.3-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:16121eb030a2b13094cfec936b0c12e8b4063c5f839591ea7d0212336d8f9921"}, - {file = "tokenizers-0.20.3-cp39-none-win32.whl", hash = "sha256:401cc21ef642ee235985d747f65e18f639464d377c70836c9003df208d582064"}, - {file = "tokenizers-0.20.3-cp39-none-win_amd64.whl", hash = "sha256:7498f3ea7746133335a6adb67a77cf77227a8b82c8483f644a2e5f86fea42b8d"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:e919f2e3e68bb51dc31de4fcbbeff3bdf9c1cad489044c75e2b982a91059bd3c"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:b8e9608f2773996cc272156e305bd79066163a66b0390fe21750aff62df1ac07"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:39270a7050deaf50f7caff4c532c01b3c48f6608d42b3eacdebdc6795478c8df"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e005466632b1c5d2d2120f6de8aa768cc9d36cd1ab7d51d0c27a114c91a1e6ee"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a07962340b36189b6c8feda552ea1bfeee6cf067ff922a1d7760662c2ee229e5"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:55046ad3dd5f2b3c67501fcc8c9cbe3e901d8355f08a3b745e9b57894855f85b"}, - {file = "tokenizers-0.20.3-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:efcf0eb939988b627558aaf2b9dc3e56d759cad2e0cfa04fcab378e4b48fc4fd"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:f3558a7ae6a6d38a77dfce12172a1e2e1bf3e8871e744a1861cd7591ea9ebe24"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d53029fe44bc70c3ff14ef512460a0cf583495a0f8e2f4b70e26eb9438e38a9"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:57a2a56397b2bec5a629b516b23f0f8a3e4f978c7488d4a299980f8375954b85"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b1e5bfaae740ef9ece000f8a07e78ac0e2b085c5ce9648f8593ddf0243c9f76d"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:fbaf3ea28fedfb2283da60e710aff25492e795a7397cad8a50f1e079b65a5a70"}, - {file = "tokenizers-0.20.3-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c47c037116310dc976eb96b008e41b9cfaba002ed8005848d4d632ee0b7ba9ae"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:c31751f0721f58f5e19bb27c1acc259aeff860d8629c4e1a900b26a1979ada8e"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:c697cbd3be7a79ea250ea5f380d6f12e534c543cfb137d5c734966b3ee4f34cc"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b48971b88ef9130bf35b41b35fd857c3c4dae4a9cd7990ebc7fc03e59cc92438"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4e615de179bbe060ab33773f0d98a8a8572b5883dd7dac66c1de8c056c7e748c"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da1ec842035ed9999c62e45fbe0ff14b7e8a7e02bb97688cc6313cf65e5cd755"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:6ee4954c1dd23aadc27958dad759006e71659d497dcb0ef0c7c87ea992c16ebd"}, - {file = "tokenizers-0.20.3-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:3eda46ca402751ec82553a321bf35a617b76bbed7586e768c02ccacbdda94d6d"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:de082392a85eb0055cc055c535bff2f0cc15d7a000bdc36fbf601a0f3cf8507a"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:c3db46cc0647bfd88263afdb739b92017a02a87ee30945cb3e86c7e25c7c9917"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a292392f24ab9abac5cfa8197e5a6208f2e43723420217e1ceba0b4ec77816ac"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:8dcd91f4e60f62b20d83a87a84fe062035a1e3ff49a8c2bbdeb2d441c8e311f4"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:900991a2b8ee35961b1095db7e265342e0e42a84c1a594823d5ee9f8fb791958"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:5a8d8261ca2133d4f98aa9627c748189502b3787537ba3d7e2beb4f7cfc5d627"}, - {file = "tokenizers-0.20.3-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:c4fd4d71e6deb6ddf99d8d0eab87d1d16f635898906e631914a9bae8ae9f2cfb"}, - {file = "tokenizers-0.20.3.tar.gz", hash = "sha256:2278b34c5d0dd78e087e1ca7f9b1dcbf129d80211afa645f214bd6e051037539"}, + {file = "tokenizers-0.21.0-cp39-abi3-macosx_10_12_x86_64.whl", hash = "sha256:3c4c93eae637e7d2aaae3d376f06085164e1660f89304c0ab2b1d08a406636b2"}, + {file = "tokenizers-0.21.0-cp39-abi3-macosx_11_0_arm64.whl", hash = "sha256:f53ea537c925422a2e0e92a24cce96f6bc5046bbef24a1652a5edc8ba975f62e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6b177fb54c4702ef611de0c069d9169f0004233890e0c4c5bd5508ae05abf193"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:6b43779a269f4629bebb114e19c3fca0223296ae9fea8bb9a7a6c6fb0657ff8e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9aeb255802be90acfd363626753fda0064a8df06031012fe7d52fd9a905eb00e"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d8b09dbeb7a8d73ee204a70f94fc06ea0f17dcf0844f16102b9f414f0b7463ba"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:400832c0904f77ce87c40f1a8a27493071282f785724ae62144324f171377273"}, + {file = "tokenizers-0.21.0-cp39-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e84ca973b3a96894d1707e189c14a774b701596d579ffc7e69debfc036a61a04"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_aarch64.whl", hash = "sha256:eb7202d231b273c34ec67767378cd04c767e967fda12d4a9e36208a34e2f137e"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_armv7l.whl", hash = "sha256:089d56db6782a73a27fd8abf3ba21779f5b85d4a9f35e3b493c7bbcbbf0d539b"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_i686.whl", hash = "sha256:c87ca3dc48b9b1222d984b6b7490355a6fdb411a2d810f6f05977258400ddb74"}, + {file = "tokenizers-0.21.0-cp39-abi3-musllinux_1_2_x86_64.whl", hash = "sha256:4145505a973116f91bc3ac45988a92e618a6f83eb458f49ea0790df94ee243ff"}, + {file = "tokenizers-0.21.0-cp39-abi3-win32.whl", hash = "sha256:eb1702c2f27d25d9dd5b389cc1f2f51813e99f8ca30d9e25348db6585a97e24a"}, + {file = "tokenizers-0.21.0-cp39-abi3-win_amd64.whl", hash = "sha256:87841da5a25a3a5f70c102de371db120f41873b854ba65e52bccd57df5a3780c"}, + {file = "tokenizers-0.21.0.tar.gz", hash = "sha256:ee0894bf311b75b0c03079f33859ae4b2334d675d4e93f5a4132e1eae2834fe4"}, ] [package.dependencies] @@ -6894,39 +6798,39 @@ test = ["argcomplete (>=3.0.3)", "mypy (>=1.7.0)", "pre-commit", "pytest (>=7.0, [[package]] name = "transformers" -version = "4.46.3" +version = "4.47.0" description = "State-of-the-art Machine Learning for JAX, PyTorch and TensorFlow" optional = false -python-versions = ">=3.8.0" +python-versions = ">=3.9.0" files = [ - {file = "transformers-4.46.3-py3-none-any.whl", hash = "sha256:a12ef6f52841fd190a3e5602145b542d03507222f2c64ebb7ee92e8788093aef"}, - {file = "transformers-4.46.3.tar.gz", hash = "sha256:8ee4b3ae943fe33e82afff8e837f4b052058b07ca9be3cb5b729ed31295f72cc"}, + {file = "transformers-4.47.0-py3-none-any.whl", hash = "sha256:a8e1bafdaae69abdda3cad638fe392e37c86d2ce0ecfcae11d60abb8f949ff4d"}, + {file = "transformers-4.47.0.tar.gz", hash = "sha256:f8ead7a5a4f6937bb507e66508e5e002dc5930f7b6122a9259c37b099d0f3b19"}, ] [package.dependencies] filelock = "*" -huggingface-hub = ">=0.23.2,<1.0" +huggingface-hub = ">=0.24.0,<1.0" numpy = ">=1.17" packaging = ">=20.0" pyyaml = ">=5.1" regex = "!=2019.12.17" requests = "*" safetensors = ">=0.4.1" -tokenizers = ">=0.20,<0.21" +tokenizers = ">=0.21,<0.22" tqdm = ">=4.27" [package.extras] accelerate = ["accelerate (>=0.26.0)"] agents = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "datasets (!=2.5.0)", "diffusers", "opencv-python", "sentencepiece (>=0.1.91,!=0.1.92)", "torch"] -all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision"] +all = ["Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "codecarbon (==1.2.0)", "flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "librosa", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "phonemizer", "protobuf", "pyctcdecode (>=0.4.0)", "ray[tune] (>=2.7.0)", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision"] audio = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] benchmark = ["optimum-benchmark (>=0.3.0)"] codecarbon = ["codecarbon (==1.2.0)"] deepspeed = ["accelerate (>=0.26.0)", "deepspeed (>=0.9.3)"] deepspeed-testing = ["GitPython (<3.1.19)", "accelerate (>=0.26.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "deepspeed (>=0.9.3)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "nltk (<=3.8.1)", "optuna", "parameterized", "protobuf", "psutil", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "timeout-decorator"] -dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] -dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.20,<0.21)", "urllib3 (<2.0.0)"] -dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=0.9.16)", "tokenizers (>=0.20,<0.21)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "av (==9.2.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "flax (>=0.4.1,<=0.7.0)", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "optax (>=0.0.8,<=0.1.4)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "scipy (<1.13.0)", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] +dev-tensorflow = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "beautifulsoup4", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "isort (>=5.5.4)", "kenlm", "keras-nlp (>=0.3.1,<0.14.0)", "libcst", "librosa", "nltk (<=3.8.1)", "onnxconverter-common", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "tensorboard", "tensorflow (>2.9,<2.16)", "tensorflow-text (<2.16)", "tf2onnx", "timeout-decorator", "tokenizers (>=0.21,<0.22)", "urllib3 (<2.0.0)"] +dev-torch = ["GitPython (<3.1.19)", "Pillow (>=10.0.1,<=15.0)", "accelerate (>=0.26.0)", "beautifulsoup4", "codecarbon (==1.2.0)", "cookiecutter (==1.7.3)", "datasets (!=2.5.0)", "dill (<0.3.5)", "evaluate (>=0.2.0)", "faiss-cpu", "fugashi (>=1.0)", "ipadic (>=1.0.0,<2.0)", "isort (>=5.5.4)", "kenlm", "libcst", "librosa", "nltk (<=3.8.1)", "onnxruntime (>=1.4.0)", "onnxruntime-tools (>=1.4.2)", "optuna", "parameterized", "phonemizer", "protobuf", "psutil", "pyctcdecode (>=0.4.0)", "pydantic", "pytest (>=7.2.0,<8.0.0)", "pytest-rich", "pytest-timeout", "pytest-xdist", "ray[tune] (>=2.7.0)", "rhoknp (>=1.1.0,<1.3.1)", "rich", "rjieba", "rouge-score (!=0.0.7,!=0.0.8,!=0.1,!=0.1.1)", "ruff (==0.5.1)", "sacrebleu (>=1.4.12,<2.0.0)", "sacremoses", "scikit-learn", "sentencepiece (>=0.1.91,!=0.1.92)", "sigopt", "sudachidict-core (>=20220729)", "sudachipy (>=0.6.6)", "tensorboard", "timeout-decorator", "timm (<=1.0.11)", "tokenizers (>=0.21,<0.22)", "torch", "torchaudio", "torchvision", "unidic (>=1.0.2)", "unidic-lite (>=1.0.7)", "urllib3 (<2.0.0)"] flax = ["flax (>=0.4.1,<=0.7.0)", "jax (>=0.4.1,<=0.4.13)", "jaxlib (>=0.4.1,<=0.4.13)", "optax (>=0.0.8,<=0.1.4)", "scipy (<1.13.0)"] flax-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] ftfy = ["ftfy"] @@ -6952,12 +6856,12 @@ tf = ["keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow (>2.9,< tf-cpu = ["keras (>2.9,<2.16)", "keras-nlp (>=0.3.1,<0.14.0)", "onnxconverter-common", "tensorflow-cpu (>2.9,<2.16)", "tensorflow-probability (<0.24)", "tensorflow-text (<2.16)", "tf2onnx"] tf-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)"] tiktoken = ["blobfile", "tiktoken"] -timm = ["timm (<=0.9.16)"] -tokenizers = ["tokenizers (>=0.20,<0.21)"] +timm = ["timm (<=1.0.11)"] +tokenizers = ["tokenizers (>=0.21,<0.22)"] torch = ["accelerate (>=0.26.0)", "torch"] torch-speech = ["kenlm", "librosa", "phonemizer", "pyctcdecode (>=0.4.0)", "torchaudio"] torch-vision = ["Pillow (>=10.0.1,<=15.0)", "torchvision"] -torchhub = ["filelock", "huggingface-hub (>=0.23.2,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.20,<0.21)", "torch", "tqdm (>=4.27)"] +torchhub = ["filelock", "huggingface-hub (>=0.24.0,<1.0)", "importlib-metadata", "numpy (>=1.17)", "packaging (>=20.0)", "protobuf", "regex (!=2019.12.17)", "requests", "sentencepiece (>=0.1.91,!=0.1.92)", "tokenizers (>=0.21,<0.22)", "torch", "tqdm (>=4.27)"] video = ["av (==9.2.0)"] vision = ["Pillow (>=10.0.1,<=15.0)"] @@ -7657,4 +7561,4 @@ tesserocr = ["tesserocr"] [metadata] lock-version = "2.0" python-versions = "^3.9" -content-hash = "9937d92a9800a7064976f0e1f797c5da648e635c7b331904ad302dacef961ecc" +content-hash = "5320329d9899ce8577ab91f634df8568f97ab3a9d6d27c06ceba4cffca255533" diff --git a/pyproject.toml b/pyproject.toml index 672a3487..8d1a8dcf 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -25,8 +25,8 @@ packages = [{include = "docling"}] # actual dependencies: ###################### python = "^3.9" +docling-core = "^2.7.1" pydantic = "^2.0.0" -docling-core = "^2.7.0" docling-ibm-models = "^2.0.6" deepsearch-glm = "^0.26.1" filetype = "^1.2.0" From e7803334409a343a59c536c529a03d6f5cdbfe15 Mon Sep 17 00:00:00 2001 From: Panos Vagenas <35837085+vagenas@users.noreply.github.com> Date: Fri, 6 Dec 2024 13:18:14 +0100 Subject: [PATCH 40/40] docs: document new integrations (#532) Signed-off-by: Panos Vagenas <35837085+vagenas@users.noreply.github.com> --- docs/integrations/bee.md | 2 +- docs/integrations/cloudera.md | 6 ++++++ docs/integrations/data_prep_kit.md | 13 +++++-------- docs/integrations/docetl.md | 2 +- docs/integrations/instructlab.md | 7 +++---- docs/integrations/kotaemon.md | 4 ++-- docs/integrations/llamaindex.md | 6 ++---- docs/integrations/prodigy.md | 9 ++++++--- docs/integrations/rhel_ai.md | 10 ++++++++++ docs/integrations/spacy.md | 7 ++++--- docs/integrations/txtai.md | 9 +++++++++ mkdocs.yml | 3 +++ 12 files changed, 52 insertions(+), 26 deletions(-) create mode 100644 docs/integrations/cloudera.md create mode 100644 docs/integrations/rhel_ai.md create mode 100644 docs/integrations/txtai.md diff --git a/docs/integrations/bee.md b/docs/integrations/bee.md index 168fd788..f46ea9e3 100644 --- a/docs/integrations/bee.md +++ b/docs/integrations/bee.md @@ -1,7 +1,7 @@ Docling is available as an extraction backend in the [Bee][github] framework. - 💻 [Bee GitHub][github] -- 📖 [Bee Docs][docs] +- 📖 [Bee docs][docs] - 📦 [Bee NPM][package] [github]: https://github.com/i-am-bee diff --git a/docs/integrations/cloudera.md b/docs/integrations/cloudera.md new file mode 100644 index 00000000..748f266e --- /dev/null +++ b/docs/integrations/cloudera.md @@ -0,0 +1,6 @@ +Docling is available in [Cloudera](https://www.cloudera.com/) through the *RAG Studio* +Accelerator for Machine Learning Projects (AMP). + +- 💻 [RAG Studio AMP GitHub][github] + +[github]: https://github.com/cloudera/CML_AMP_RAG_Studio diff --git a/docs/integrations/data_prep_kit.md b/docs/integrations/data_prep_kit.md index c9b3755a..a071cef4 100644 --- a/docs/integrations/data_prep_kit.md +++ b/docs/integrations/data_prep_kit.md @@ -1,13 +1,10 @@ -## Get started - Docling is used by the [Data Prep Kit](https://ibm.github.io/data-prep-kit/) open-source toolkit for preparing unstructured data for LLM application development ranging from laptop scale to datacenter scale. -Below you find the Data Prep Kit modules powered by Docling. - -## PDF ingestion to Parquet +## Components +### PDF ingestion to Parquet - 💻 [PDF-to-Parquet GitHub](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/pdf2parquet) -- 📖 [PDF-to-Parquet Docs](https://ibm.github.io/data-prep-kit/transforms/language/pdf2parquet/python/) +- 📖 [PDF-to-Parquet docs](https://ibm.github.io/data-prep-kit/transforms/language/pdf2parquet/python/) -## Document chunking +### Document chunking - 💻 [Doc Chunking GitHub](https://github.com/IBM/data-prep-kit/tree/dev/transforms/language/doc_chunk) -- 📖 [Doc Chunking Docs](https://ibm.github.io/data-prep-kit/transforms/language/doc_chunk/python/) +- 📖 [Doc Chunking docs](https://ibm.github.io/data-prep-kit/transforms/language/doc_chunk/python/) diff --git a/docs/integrations/docetl.md b/docs/integrations/docetl.md index a03a4044..e61f028c 100644 --- a/docs/integrations/docetl.md +++ b/docs/integrations/docetl.md @@ -1,7 +1,7 @@ Docling is available as a file conversion method in [DocETL](https://github.com/ucbepic/docetl): - 💻 [DocETL GitHub][github] -- 📖 [DocETL Docs][docs] +- 📖 [DocETL docs][docs] - 📦 [DocETL PyPI][pypi] [github]: https://github.com/ucbepic/docetl diff --git a/docs/integrations/instructlab.md b/docs/integrations/instructlab.md index 5f3b3315..a8979039 100644 --- a/docs/integrations/instructlab.md +++ b/docs/integrations/instructlab.md @@ -1,14 +1,13 @@ -Docling is powering document processing in [InstructLab](https://instructlab.ai/), +Docling is powering document processing in [InstructLab][home], enabling users to unlock the knowledge hidden in documents and present it to InstructLab's fine-tuning for aligning AI models to the user's specific data. More details can be found in this [blog post][blog]. -- 🏠 [InstructLab Home][home] +- 🏠 [InstructLab home][home] - 💻 [InstructLab GitHub][github] - 🧑🏻‍💻 [InstructLab UI][ui] -- 📖 [InstructLab Docs][docs] - +- 📖 [InstructLab docs][docs] [home]: https://instructlab.ai [github]: https://github.com/instructlab diff --git a/docs/integrations/kotaemon.md b/docs/integrations/kotaemon.md index 14cfc130..9858dc70 100644 --- a/docs/integrations/kotaemon.md +++ b/docs/integrations/kotaemon.md @@ -1,8 +1,8 @@ Docling is available in [Kotaemon](https://cinnamon.github.io/kotaemon/) as the `DoclingReader` loader: - 💻 [Kotaemon GitHub][github] -- 📖 [DoclingReader Docs][docs] -- ⚙️ [Docling Setup in Kotaemon][setup] +- 📖 [DoclingReader docs][docs] +- ⚙️ [Docling setup in Kotaemon][setup] [github]: https://github.com/Cinnamon/kotaemon [docs]: https://cinnamon.github.io/kotaemon/reference/loaders/docling_loader/ diff --git a/docs/integrations/llamaindex.md b/docs/integrations/llamaindex.md index dc61b34f..928d0475 100644 --- a/docs/integrations/llamaindex.md +++ b/docs/integrations/llamaindex.md @@ -1,5 +1,3 @@ -## Get started - Docling is available as an official [LlamaIndex](https://docs.llamaindex.ai/) extension. To get started, check out the [step-by-step guide in LlamaIndex](https://docs.llamaindex.ai/en/stable/examples/data_connectors/DoclingReaderDemo/). @@ -11,7 +9,7 @@ To get started, check out the [step-by-step guide in LlamaIndex](https://docs.ll Reads document files and uses Docling to populate LlamaIndex `Document` objects — either serializing Docling's data model (losslessly, e.g. as JSON) or exporting to a simplified format (lossily, e.g. as Markdown). - 💻 [Docling Reader GitHub](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/readers/llama-index-readers-docling) -- 📖 [Docling Reader Docs](https://docs.llamaindex.ai/en/stable/api_reference/readers/docling/) +- 📖 [Docling Reader docs](https://docs.llamaindex.ai/en/stable/api_reference/readers/docling/) - 📦 [Docling Reader PyPI](https://pypi.org/project/llama-index-readers-docling/) ### Docling Node Parser @@ -19,5 +17,5 @@ Reads document files and uses Docling to populate LlamaIndex `Document` objects Reads LlamaIndex `Document` objects populated in Docling's format by Docling Reader and, using its knowledge of the Docling format, parses them to LlamaIndex `Node` objects for downstream usage in LlamaIndex applications, e.g. as chunks for embedding. - 💻 [Docling Node Parser GitHub](https://github.com/run-llama/llama_index/tree/main/llama-index-integrations/node_parser/llama-index-node-parser-docling) -- 📖 [Docling Node Parser Docs](https://docs.llamaindex.ai/en/stable/api_reference/node_parser/docling/) +- 📖 [Docling Node Parser docs](https://docs.llamaindex.ai/en/stable/api_reference/node_parser/docling/) - 📦 [Docling Node Parser PyPI](https://pypi.org/project/llama-index-node-parser-docling/) diff --git a/docs/integrations/prodigy.md b/docs/integrations/prodigy.md index 8bb40c29..388f64fa 100644 --- a/docs/integrations/prodigy.md +++ b/docs/integrations/prodigy.md @@ -1,9 +1,12 @@ Docling is available in [Prodigy][home] as a [Prodigy-PDF plugin][plugin] recipe. -- 🌐 [Prodigy Home][home] -- 🔌 [Prodigy-PDF Plugin][plugin] -- 🧑🏽‍🍳 [pdf-spans.manual Recipe][recipe] +More details can be found in this [blog post][blog]. + +- 🌐 [Prodigy home][home] +- 🔌 [Prodigy-PDF plugin][plugin] +- 🧑🏽‍🍳 [pdf-spans.manual recipe][recipe] [home]: https://prodi.gy/ [plugin]: https://prodi.gy/docs/plugins#pdf [recipe]: https://prodi.gy/docs/plugins#pdf-spans.manual +[blog]: https://explosion.ai/blog/pdfs-nlp-structured-data diff --git a/docs/integrations/rhel_ai.md b/docs/integrations/rhel_ai.md new file mode 100644 index 00000000..0d603eb9 --- /dev/null +++ b/docs/integrations/rhel_ai.md @@ -0,0 +1,10 @@ +Docling is powering document processing in [Red Hat Enterprise Linux AI][home] (RHEL AI), +enabling users to unlock the knowledge hidden in documents and present it to +InstructLab's fine-tuning for aligning AI models to the user's specific data. + +More details can be found in this [blog post][blog]. + +- 🏠 [RHEL AI home][home] + +[home]: https://www.redhat.com/en/technologies/linux-platforms/enterprise-linux/ai +[blog]: https://www.redhat.com/en/blog/docling-missing-document-processing-companion-generative-ai diff --git a/docs/integrations/spacy.md b/docs/integrations/spacy.md index a0578703..a3940b90 100644 --- a/docs/integrations/spacy.md +++ b/docs/integrations/spacy.md @@ -1,11 +1,12 @@ -# spaCy +Docling is available in [spaCy](https://spacy.io/) as the *spaCy Layout* plugin. -Docling is available in [spaCy](https://spacy.io/) as the "SpaCy Layout" plugin: +More details can be found in this [blog post][blog]. - 💻 [SpacyLayout GitHub][github] -- 📖 [SpacyLayout Docs][docs] +- 📖 [SpacyLayout docs][docs] - 📦 [SpacyLayout PyPI][pypi] [github]: https://github.com/explosion/spacy-layout [docs]: https://github.com/explosion/spacy-layout?tab=readme-ov-file#readme [pypi]: https://pypi.org/project/spacy-layout/ +[blog]: https://explosion.ai/blog/pdfs-nlp-structured-data diff --git a/docs/integrations/txtai.md b/docs/integrations/txtai.md new file mode 100644 index 00000000..28b6bf5a --- /dev/null +++ b/docs/integrations/txtai.md @@ -0,0 +1,9 @@ +Docling is available as a text extraction backend for [txtai](https://neuml.github.io/txtai/). + +- 💻 [txtai GitHub][github] +- 📖 [txtai docs][docs] +- 📖 [txtai Docling backend][integration_docs] + +[github]: https://github.com/neuml/txtai +[docs]: https://neuml.github.io/txtai +[integration_docs]: https://neuml.github.io/txtai/pipeline/data/filetohtml/#docling diff --git a/mkdocs.yml b/mkdocs.yml index f118edbd..687ae6d6 100644 --- a/mkdocs.yml +++ b/mkdocs.yml @@ -87,13 +87,16 @@ nav: - Integrations: - Integrations: integrations/index.md - "🐝 Bee": integrations/bee.md + - "Cloudera": integrations/cloudera.md - "Data Prep Kit": integrations/data_prep_kit.md - "DocETL": integrations/docetl.md - "🐶 InstructLab": integrations/instructlab.md - "Kotaemon": integrations/kotaemon.md - "🦙 LlamaIndex": integrations/llamaindex.md - "Prodigy": integrations/prodigy.md + - "Red Hat Enterprise Linux AI": integrations/rhel_ai.md - "spaCy": integrations/spacy.md + - "txtai": integrations/txtai.md # - "LangChain 🦜🔗": integrations/langchain.md - API reference: - Document Converter: api_reference/document_converter.md

    uqO*_QT%Z}1cFrh65N!b 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 Docling DS4SD%2Fdocling | Trendshift @@ -23,7 +21,7 @@ Docling parses documents and exports them to the desired format with ease and sp * 🗂️ Reads popular document formats (PDF, DOCX, PPTX, XLSX, Images, HTML, AsciiDoc & Markdown) and exports to Markdown and JSON * 📑 Advanced PDF document understanding incl. page layout, reading order & table structures * 🧩 Unified, expressive [DoclingDocument](./concepts/docling_document.md) representation format -* 🤖 Easy integration with LlamaIndex 🦙 & LangChain 🦜🔗 for powerful RAG / QA applications +* 🤖 Easy integration with 🦙 LlamaIndex & 🦜🔗 LangChain for powerful RAG / QA applications * 🔍 OCR support for scanned PDFs * 💻 Simple and convenient CLI diff --git a/docs/integrations/bee.md b/docs/integrations/bee.md new file mode 100644 index 00000000..168fd788 --- /dev/null +++ b/docs/integrations/bee.md @@ -0,0 +1,9 @@ +Docling is available as an extraction backend in the [Bee][github] framework. + +- 💻 [Bee GitHub][github] +- 📖 [Bee Docs][docs] +- 📦 [Bee NPM][package] + +[github]: https://github.com/i-am-bee +[docs]: https://i-am-bee.github.io/bee-agent-framework/ +[package]: https://www.npmjs.com/package/bee-agent-framework diff --git a/docs/integrations/index.md b/docs/integrations/index.md index 3539c2f6..fb8d7fe0 100644 --- a/docs/integrations/index.md +++ b/docs/integrations/index.md @@ -1 +1,6 @@ Use the navigation on the left to browse through Docling integrations with popular frameworks and tools. + + +